JSON专题

JSON 知识点

什么是 JSON ?

  • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
  • JSON 是轻量级的文本数据交换格式
  • JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和
  • JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
  • JSON 具有自我描述性,更易理解

json语法

json语法规则

  • 数据在名称/值对中
  • 数据由逗号 , 分隔
  • 使用斜杆来转义 \ 字符
  • 大括号 {} 保存对象
  • 中括号 [] 保存数组,数组可以包含多个对象

JSON 的两种结构

1.对象
大括号 {} 保存的对象是一个无序的名称/值对集合。一个对象以左括号 { 开始, 右括号 } 结束。每个"键"后跟一个冒号 :,名称/值对使用逗号 , 分隔

{key1 : value1, key2 : value2, ... keyN : valueN }
例:{ "name":"吨吨" , "age":18 }

2.数组:
中括号 [] 保存的数组是值(value)的有序集合。一个数组以左中括号 [ 开始, 右中括号 ] 结束,值之间使用逗号 , 分隔。

[
    { key1 : value1-1 , key2:value1-2 }, 
    { key1 : value2-1 , key2:value2-2 }, 
    { key1 : value3-1 , key2:value3-2 }, 
    ...
    { key1 : valueN-1 , key2:valueN-2 }, 
]
例:
"like":[
	{ "name":"吨吨" , "age":18 },
	{ "name":"好养活" , "age":18 }
]

JSON 值

数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在中括号中)
对象(在大括号中)
null

JSON的转换

java对象和json之间相互转换三种方式

1.JackSon

maven依赖:(springboot中只要导入了spring-boot-starter-web会传递依赖,可以直接使用)

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.3</version>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.3</version>
</dependency>
 <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.3</version>
 </dependency>

GSon(谷歌)

maven依赖:

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.2</version>
</dependency>

3.fastjson
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version> 1.2.70</version>
</dependency>

JSON对象与java对象之间的相互转换

Java对象–>JSON对象

1.使用JackSON实现Java对象–>JSON对象

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
 
import com.fasterxml.jackson.databind.ObjectMapper;
 
public class JacksonDemo {
  public static void main(String[] args) throws ParseException, IOException {
    User user = new User();
    user.setName("小民"); 
    user.setEmail("xiaomin@sina.com");
    user.setAge(20);
     
    SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
    user.setBirthday(dateformat.parse("1996-10-01"));    
     
    /**
     * ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。
     * ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。
     * writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。
     * writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。
     * writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。
     * writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。
     */
    ObjectMapper mapper = new ObjectMapper();
     
    //User类转JSON
    //输出结果:{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}
    String json = mapper.writeValueAsString(user);
    System.out.println(json);
     
    //Java集合转JSON
    //输出结果:[{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}]
    List<User> users = new ArrayList<User>();
    users.add(user);
    String jsonlist = mapper.writeValueAsString(users);
    System.out.println(jsonlist);
  }
}

1.使用GSon实现Java对象–>JSON对象

public static void main(String[] args) {
//		Gson gson = new Gson();
		Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		Student student = new Student(11, "zhangsan", new  Date());
		Student stu1 = new Student(12, "lisi", new Date());
		Student stu2 = new Student(13, "wangwu", new Date());
		Student stu3 = new Student(14, "weili", new Date());
		//Java对象–>JSON对象
		String jsonStr = gson.toJson(student, Student.class);
		System.out.println(jsonStr );
	
	}

3.使用fastjson实现Java对象–>JSON对象

public class JSONTest{
    public static void main(String[] args) {
        User user = new User("好养活", "男", 18);
 
        //Java对象转化为JSON对象
        JSONObject jsonObject = (JSONObject) JSONObject.toJSON(user);
        System.out.println("Java对象转化为JSON对象\n" + jsonObject);//{"name":"好养活","age":18,"sex":"男"}
        
    }
}
JSON对象–>Java对象

1.使用JackSon实现JSON对象–>Java对象

import java.io.IOException;
import java.text.ParseException;
import com.fasterxml.jackson.databind.ObjectMapper;
 
public class JacksonDemo {
  public static void main(String[] args) throws ParseException, IOException {
    String json = "{\"name\":\"小民\",\"age\":20,\"birthday\":844099200000,\"email\":\"xiaomin@sina.com\"}";
     
    /**
     * ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化。
     */
    ObjectMapper mapper = new ObjectMapper();
    User user = mapper.readValue(json, User.class);
    System.out.println(user);
  }
}

2.使用GSon实现JSON对象–>Java对象

public static void main(String[] args) {
//		Gson gson = new Gson();
		Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		
		String jsonSrc = "{\"age\":11,\"name\":\"zhangsan\",\"bir\":\"2014-12-05 16:46:50\"}";
		Student stu = gson.fromJson(jsonSrc, Student.class);
		System.out.println(stu);
		
	
	}

3.使用fastjson实现JSON对象–>Java对象

public class JSONTest{
    public static void main(String[] args) {
        User user1 = new User("好养活", "男", 18);
 
        //先转成JSON对象
        JSONObject jsonObject = (JSONObject) JSONObject.toJSON(user1);
    
        //JSON对象转换成Java对象
        User user = JSONObject.toJavaObject(jsonObject, User.class);
        System.out.println("JSON对象转换成Java对象\n" + user);
        //User{name='好养活', sex='男', age=18}
    }
}

Java对象与JSON字符串之间的相互转换

Java对象–>JSON字符串

1.使用JackSon实现Java对象与JSON字符串之间的相互转换

package com.test;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ObjectToJSON {

    public static void main(String[] args) throws JsonProcessingException {
        User student = new User("好养活", "男", 18);
        //ObjectMapper:操作json的核心类
        ObjectMapper mapper = new ObjectMapper();
        //将java对象转换成json字符串
        String Json = mapper.writeValueAsString(student);
        System.out.println("使用jackson实现java对象转JSON字符串-->"+ Json);//使用jackson实现java对象转JSON字符串-->{"name":"好养活","sex":"男","age":18}
    }
}

2、使用GSon实现Java对象与JSON字符串之间的相互转换

public static void main(String[] args) {
//		Gson gson = new Gson();
		Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		Student student = new Student(11, "zhangsan", new  Date());
		Student stu1 = new Student(12, "lisi", new Date());
		Student stu2 = new Student(13, "wangwu", new Date());
		Student stu3 = new Student(14, "weili", new Date());
		String jsonStr = gson.toJson(student, Student.class);
		System.out.println(jsonStr );
		
	}

3.使用fastjson实现Java对象与JSON字符串之间的相互转换


public class JSONTest{
    public static void main(String[] args) {
        USer user = new User("好养活", "男", 18);
        //Java对象转换成JSON字符串
        String userStr = JSONObject.toJSONString(user);
        System.out.println("Java对象转换成JSON字符串\n" + userStr);//{"age":18,"name":"好养活","sex":"男"}
    }
}
JSON字符串–>Java对象
public class JSONTest{
    public static void main(String[] args) {
        String userStr = "{\"age\":18,\"name\":\"好养活\",\"sex\":\"男\"}";
        //JSON字符串转换成Java对象
        User user = JSONObject.parseObject(userStr, User.class);
        System.out.println("JSON字符串转换成Java对象\n" + user);//user {name='好养活', sex='男', age=18}
    }
}

JSON对象与JSON字符串之间的相互转换

JSON对象–>JSON字符串

.使用fastjson实现JSON对象–>JSON字符串

public class JSONTest{
    public static void main(String[] args) {
        User user = new User("好养活", "男", 18);
 
        //先转成JSON对象
        JSONObject jsonObject = (JSONObject) JSONObject.toJSON(user);
 
        //JSON对象转换为JSON字符串
        String jsonString = jsonObject.toJSONString();
        System.out.println("JSON对象转换为JSON字符串\n" + jsonString);//{"name":"好养活","age":18,"sex":"男"}
 
    }
}
JSON字符串–>JSON对象

1.使用fastjson实现JSON字符串–>JSON对象

public class JSONTest{
    public static void main(String[] args) {
        String userStr = "{\"age\":18,\"name\":\"张三\",\"sex\":\"男\"}";
 
        //JSON字符串转换成JSON对象
        JSONObject jsonObject1 = JSONObject.parseObject(userStr);
        System.out.println("JSON字符串转换成JSON对象\n" + jsonObject1);//{"sex":"男","name":"张三","age":18}
    }
}

json对象转map

1.使用JackSon实现json对象转map互转


2.使用Gson实现json对象转map互转

package com.test;
import com.google.gson.Gson;
import java.util.HashMap;
import java.util.Map;
public class JavaToJson {
    public static void main(String[] args) {
        Map<String, Object> resultMap = new HashMap<String, Object>();
        resultMap.put("code",0);
        resultMap.put("message","请求成功");
        resultMap.put("data","数据信息");
        //Gson
        Gson gson = new Gson();
        // Map转JSON
         String s = gson.toJson(resultMap);
        System.out.println("使用Gson进行map转JSON-->"+s);//使用Gson进行map转JSON-->{"code":0,"data":"数据信息","message":"请求成功"}
        // 解析json,并指定解析对象类型
        Map o = gson.fromJson(s, Map.class);
        System.out.println("使用Gson进行Json转Map-->"+o);//使用Gson进行Json转Map-->{code=0.0, data=数据信息, message=请求成功}
    }
}

在这里插入图片描述

3.使用JSONObject实现json对象转map互转

String s = JSON.toJSONString(resultMap);
// 解析json,并指定解析对象类型
Object o = JSON.parseObject(s, Object.class);
package com.test;

import com.alibaba.fastjson.JSONObject;
import com.sun.deploy.security.ruleset.RuleSetParser;

import java.util.Map;

public class JsonToMap {

    public static void main(String[] args) {
        String str = "{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}";
        /**
         * JSONObject是Map接口的一个实现类
         */
        Map json = (Map) JSONObject.parse(str);
        System.out.println("这个是用JSONObject类的parse方法来解析JSON字符串!!!");
        for (Object map : json.entrySet()) {
            System.out.println(((Map.Entry) map).getKey() + "  " + ((Map.Entry) map).getValue());
        }

        /**
         * JSONObject是Map接口的一个实现类
         */
        JSONObject jsonObject = JSONObject.parseObject(str);
        System.out.println("这个是用JSONObject的parseObject方法来解析JSON字符串!!!");
        for (Object map : json.entrySet()) {
            System.out.println(((Map.Entry) map).getKey() + "  " + ((Map.Entry) map).getValue());
        }

        /**
         * JSONObject是Map接口的一个实现类
         */
        Map mapObj = JSONObject.parseObject(str, Map.class);
        System.out.println("这个是用JSONObject的parseObject方法并执行返回类型来解析JSON字符串!!!");
        for (Object map : json.entrySet()) {
            System.out.println(((Map.Entry) map).getKey() + "  " + ((Map.Entry) map).getValue());
        }
        System.out.println(json);
    }
}

在这里插入图片描述

JSON 与List之间的相互转换

List 转JSON

1.使用jackson实现list转换为json

package com.test;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;

public class ListToJson {
    public static void main(String[] args) throws JsonProcessingException {

        List<User> list = new ArrayList<>();
        list.add(new User("好养活1", "男", 18));
        list.add(new User("好养活2", "男", 18));
        list.add(new User("好养活3", "女", 18));
        //使用JackSon实现List转JSON对象
        ObjectMapper mapper = new ObjectMapper();
        String studentList = mapper.writeValueAsString(list);
        System.out.println("使用JackSon实现List转JSON对象-->"+studentList);//使用JackSon实现List转JSON对象-->[{"name":"好养活1","sex":"男","age":18},{"name":"好养活2","sex":"男","age":18},{"name":"好养活3","sex":"女","age":18}]

    }
}

  1. 使用GSon实现list转换为json
//list转换为json
public static void main(String[] args) {
//		Gson gson = new Gson();
		Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		List<Student> list = new ArrayList<Student>();
		list.add(student);
		list.add(stu1);
		list.add(stu2);
		list.add(stu3);
		String jsonListStr = gson.toJson(list);
		System.out.println(jsonListStr);
	}
  1. 使用fastJSON实现list转换为json
//list转换为json
List list = new ArrayList();
String str=JSON.toJSON(list).toString();
JSON 转List
  1. 使用Gson实现JSON–>List
public static void main(String[] args) {
//		Gson gson = new Gson();
		Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		list.add(student);
		list.add(stu1);
		list.add(stu2);
		list.add(stu3);
		String jsonListStr = gson.toJson(list);
		System.out.println(jsonListStr);
		List<Student> stuList = gson.fromJson(jsonListStr, new TypeToken<List<Student>>() {
		}.getType());
		System.out.println("========反序列化json数组==========");
		System.out.println(stuList);
	}
  1. 使用fastJson 实现json转换为list
//json转换为list
//jasonArray:json字符串
List list = new ArrayList();
list = JSONObject.parseArray(jasonArray, Person.class);

JSONArray与List之间的互相转换

List转JSONArray
  1. 使用 fastJSON实现List转JSONArray
//List转JSONArray
List list = new ArrayList<>();
JSONArray array= JSONArray.parseArray(JSON.toJSONString(list))
JSONArray转List
  1. 使用 fastJSON实现JSONArray转List
//JSONArray转List
JSONArray array = new JSONArray();
List list = JSONObject.parseArray(array.toJSONString(), User.class);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值