Java学习笔记——JSON解析

什么是JSON
  • JSON指的是JavaScript对象表示法(Java Script Object Notation)
  • JSON是轻量级的文本数据交换格式
  • JSON独立于语言
为什么使用JSON?
  • 对于AJAX应用程序来说,JSON比XML更快更易使用
JSON 语法规则
  • 数据是键:值对的形式(java中键用引号引起来)

  • 数据由逗号分隔

  • 大括号 {} 保存对象

  • 中括号 [] 保存数组

  • {
    	"name":"小白",
    	"age":18,
    	"friends":[{"name":"小朱"},{"name":"小黑"},{"name":"小赵"}]
    }
    
JSON 值可以是
  • int、String、boolean、Array、Object、null
Java 解析 JSON
  1. 使用谷歌 Gson

    Gson 类
    • 两个主要方法:
    public String toJson(Object src) 将对象转成 JSON
    public T fromJson(String json, Class classOfT) 将 JSON 转成对象
    解析为对象
    // JSON转成对象
    String jsonText = "{\"name\":\"小吴\",\"age\":22,\"sex\":\"男\",\"friends\":{\"name\":\"小赵\",\"age\":19,\"sex\":\"女\"}}";
    Person xw = new Gson().fromJson(jsonText, Person.class);
    System.out.println(xw.toString());
    // 输出:Person{name='小吴', age=22, sex='男', friends=Person{name='小赵', age=19, sex='女', friends=null}}
    
    解析为集合
    // JSON转成集合
    String jsonText = "{\"name\":\"小吴\",\"age\":22,\"sex\":\"男\",\"friends\":{\"name\":\"小赵\",\"age\":19,\"sex\":\"女\"}}";
    HashMap map = new Gson().fromJson(jsonText, HashMap.class);
    System.out.println(map.get("name")); // 输出:小吴
    // 多层解析
    String jsonText2 = map.get("friends").toString();
    Person xz = new Gson().fromJson(jsonText2, Person.class);
    System.out.println(xz.toString());
    // 输出:Person{name='小赵', age=19, sex='女', friends=null}
    
    对象生成JSON
    // 对象转成JSON
    Person xw = new Person("小吴", 22, "男");
    Person xz = new Person("小赵", 19, "女");
    xw.setFriends(xz);
    String jsonText = new Gson().toJson(xw);
    System.out.println(jsonText);
    // 输出:{"name":"小吴","age":22,"sex":"男","friends":{"name":"小赵","age":19,"sex":"女"}}
    
  2. 使用阿里 FastJson

    FastJson 类
    • 三个主要方法:

      static String toJSONString(Object object) 将对象转为 JSON
      static T parseObject(String text, Class clazz) 将 JSON 转为对象
      static List parseArray(String text, Class clazz) 将 JSON 转为数组
    解析为对象
    // JSON转成对象
    String json =  "{\"age\":22,\"friends\":{\"age\":19,\"name\":\"小赵\",\"sex\":\"女\"},\"name\":\"小吴\",\"sex\":\"男\"}";
    Person xw = JSON.parseObject(json, Person.class);
    System.out.println(xw.toString());	
    // 输出:Person{name='小吴', age=22, sex='男', friends=Person{name='小赵', age=19, sex='女', friends=null}}
    
    解析为数组
    // JSON转成数组
    List<String> list = JSON.parseArray("[\"name\",\"age\",\"sex\",\"friends\"]", String.class);
    for(String str : list){
            
        System.out.print(str + " ");
    }
    // 输出:name age sex friends
    
    解析为集合
    // JSON转成Map集合
    String json =  "{\"age\":22,\"friends\":{\"age\":19,\"name\":\"小赵\",\"sex\":\"女\"},\"name\":\"小吴\",\"sex\":\"男\"}";
    HashMap map = JSON.parseObject(json, HashMap.class);
    System.out.println(map.get("name")); // 输出:小吴
    JSONObject jsonObj = (JSONObject)map.get("friends");    // 部分转成对象
    Person xz = jsonObj.toJavaObject(Person.class);
    System.out.println(xz.getName());	// 输出:小赵
    
    对象生成JSON
    Person xw = new Person("小吴", 22, "男");
    Person xz = new Person("小赵", 19, "女");
    xw.setFriends(xz);
    String jsonText = JSON.toJSONString(xw);
    System.out.println(jsonText); 
    // 输出: {"age":22,"friends":{"age":19,"name":"小赵","sex":"女"},"name":"小吴","sex":"男"}
    
实用工具
  • 百度JSON解析,任选一个网站,检查JSON语法是否正确的同时,利用视图更好查看。

你可能感兴趣的:(Java学习笔记,json,java)