我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式。
1、JSON官方 (就不说了)
2、GSON (谷歌)
3、FastJSON (阿里巴巴)
4、jackson (springMvc 内置)

我们开始来参加 json 数据模拟对象

一、创建对象类模拟
1、对象类1 Grade

import java.util.ArrayList;

public class Grade {

    private int id;
    private String name;
    //对象类 2 集合
    private ArrayList<Student> stus;

    //自定义构造器
    public Grade(int id, String name, ArrayList<Student> stus) {
        super();
        this.id = id;
        this.name = name;
        this.stus = stus;
    }
    //默认构造器
    public Grade() {
        super();
    }
}

2、对象类2 Student

public class Student {

    private int id;
    private String name;
    private int age;
}

3、自行生成 get 、set 、toString方法

4、模拟的数据结构

/*  数据结构
 { id:
   name:
   stus:[{
      id:
      name:
      age:
     }]
  }

* */

二、Json 之 GSON (谷歌)
GSON : 谷歌的,也比较好用
其中2.8.2为版本号,最新版本以及源码可以在官方的github上查看:https://github.com/google/gson
1、添加依赖
GSON : 谷歌的,也比较好用

<dependency>  
        <groupId>com.google.code.gson</groupId>  
        <artifactId>gson</artifactId>  
        <version>2.8.2</version>  
</dependency>

2、简析json 数据

//解析json数据
public static void test1() {

    //Gson对象
    Gson gson=new Gson();

    // 解析字符串(到Grade类对象中)
    String json1 = "{'id':1,'name':'JAVAEE-1703','stus':[{'id':101,'name':'刘一','age':16}]}";
    //解析对象:第一个参数:待解析的字符串 第二个参数结果数据类型的Class对象(类对象)
    Grade grade=gson.fromJson(json1, Grade.class);
    System.out.println("解析json 字符串到类对象中:"+grade);

    // 解析数组(到list集合中)
    String json2 = "['北京','天津','杭州']";
    //解析数组要求使用Type
    ArrayList<String> list = gson.fromJson(json2,new TypeToken<ArrayList<String>>(){}.getType());
    System.out.println("解析json 数组到list集合中:"+list);
}

3、生成 json 数据

//生成json数据
public static void test2(){

    //生成3个 Student 对象保存到 list中
    ArrayList<Student> list=new ArrayList<Student>();
    for(int i=0;i<3;i++){
        list.add(new Student(101+i, "码子", 20+i));
    }
    //把 Student 保存到 Grade 中
    Grade grade = new Grade(100001,"张三", list);

    Gson gson = new Gson();
    //将对象转换为诶JSON格式字符串
    String json = gson.toJson(grade);
    System.out.println("生成json 对象数据:"json);
    //{"id":100001,"name":"张三","stus":[{"id":101,"name":"码子","age":20},{"id":102,"name":"码子","age":21},{"id":103,"name":"码子","age":22}]}
}

三、Json 之 fastjson ( 阿里巴巴)
fastjson : FastJSON是阿里巴巴的产品,效率最高

1、添加依赖
FastJSON是阿里巴巴的产品,效率最高

<!-- 二、fastjson : FastJSON是阿里巴巴的产品,效率最高  -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.4</version>
</dependency>

2、简析 json 数据

   //解析
    public static void test1() {
        // 对象嵌套数组嵌套对象
        String json1 = "{'id':1,'name':'JAVAEE-1703','stus':[{'id':101,'name':'刘铭','age':16}]}";
        // 数组
        String json2 = "['北京','天津','杭州']";
        //1、
        //静态方法
        Grade grade = JSON.parseObject(json1, Grade.class);
        System.out.println("解析对象:"+grade);
        //2、
        List<String> list = JSON.parseArray(json2, String.class);
        System.out.println("解析数组:"+list);
    }

3、生成 json 数据

    //生成
    public static void test2() {
        ArrayList<Student> list = new ArrayList<Student>();
        for (int i = 1; i < 3; i++) {
            list.add(new Student(101 + i, "码子", 20 + i));
        }
        Grade grade = new Grade(100001, "张三", list);
        String json = JSON.toJSONString(grade);
        System.out.println("生成json:"+json);
    }
}

四、Json 之 Jackson(MVC)
Jackson :SpringMVC内置的解析器就是这个

1、添加依赖

<!-- 三 、Jackson :SpringMVC内置的解析器就是这个 -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.8.1</version>
</dependency>

<!--  JSONArray 等支持-->
<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>

2、简析 json 数据

//解析
public static void test1() throws Exception {
    // 对象嵌套数组嵌套对象
    String json1 = "{\"id\":1,\"name\":\"JAVAEE-1703\",\"stus\":[{\"id\":101,\"name\":\"刘一\",\"age\":16}]}";
    // 数组
    String json2 = "[\"北京\",\"天津\",\"杭州\"]";
    //1、
    ObjectMapper mapper = new ObjectMapper();
    Grade grade = mapper.readValue(json1, Grade.class);
    System.out.println("解析 json 字符串到类对象:"+grade);
    //2、
    ArrayList<String> list = mapper.readValue(json2,
            new TypeReference<ArrayList<String>>() {
            });
    System.out.println("解析 json 数组到集合:"+list);

}

3、生成 json 数据

//生成
public static void test2() throws JsonProcessingException {
    ArrayList<Student> list = new ArrayList<Student>();
    for (int i = 1; i < 3; i++) {
        list.add(new Student(101 + i, "码子", 20 + i));
    }
    Grade grade = new Grade(100001, "张三", list);
    ObjectMapper mapper = new ObjectMapper();
    //将对象转换为JSON格式字符串
    String json = mapper.writeValueAsString(grade);
    System.out.println("生成json:"+json);
}

4、json 数据转换

json -->> JavaScript Object Notation

//map集合/类转换成json -->>
数据格式如:var json = {“name”:”Jack”,”age”:90,”Marray”:true};

//把list/数组转为json -->>
数据格式如:var json = {“name”,”age”,”Marray”};

1、Map 转 json

JSONObject obj = JSONObject.fromObject(map);   //把map`集合/类` 转成json

2、list 转 json

JSONArray obj = JSONArray.fromObject(list);       //把list/数组  转为json

3、json 转 字符串

JSONObject obj = JSONObject.fromObject(str);      // 获取json 字符串 str
String result = obj.toString();           // 把json对象转换成字符串

4、json转 类对象

JSONObject obj = JSONObject.fromObject(str);      // 获取json 字符串 str
Person p = (Person) JSONObject.toBean(obj, Person.class);  //把 json字符串转为 Person类(对应属性)        

5、json转 Map

JSONObject obj = JSONObject.fromObject(str);      // 获取json 字符串 str
Map m = (Map) JSONObject.toBean(obj, Map.class);            //把 json字符串转为 Map

5、解析 json 数据2
// json 解析生成对象

public static void test3(){
    // 对象嵌套数组嵌套对象
    //String json1 = "[{\"id\":1,\"name\":\"JAVAEE-1703\",\"stus\":[{\"id\":101,\"name\":\"刘一\",\"age\":16}]}]";
    String json1 = "[{'id':1,'name':'JAVAEE-1703','stus':[{'id':101,'name':'刘一','age':16}]}]";
    //获取json字符串
    JSONArray ja = JSONArray.fromObject(json1);
    //创建json配置对象
    JsonConfig jc = new JsonConfig();
    //设置json的要转换的类
    jc.setRootClass(Grade.class);
    //把json的多个对象属性放入集合
    List<Grade> pList = (List<Grade>) JSONSerializer.toJava(ja, jc);
    for (Grade p : pList) {
        System.out.println(p);
    }
}

获得结果
json 之 java 操作数据

6、属性排除

//属性排除
public  static  void test4(Grade p){
    JsonConfig jc = new JsonConfig();                 //创建json配置对象
    String[] attrs = {"id","stus"};                   //添加要排除的属性
    jc.setExcludes(attrs);                            //排除 /转换json时
    //JSONObject obj = JSONObject.fromObject(p, jc);  //把map转换成json对象
    JSONArray  p1 = JSONArray.fromObject(p, jc);     //把list转换成json对象
    System.out.println(p1);
}

json 之 java 操作数据

结果:第二次输出被排除掉了

json 之 java 操作数据

相关文章: