Java基础_JSON

定义?

  JSON(JavaScript Object Notation):JavaScript对象表示法。

为什么使用JSON?

  • JSON是纯文本格式,独立于语言和平台;
  • 生成和解析相对于XML而言更简单;
  • 读写速度更快。

支持哪些数据类型?

  • Number  数字型(整数或浮点数)
  • String     字符串(在双引号中)
  • Boolean    布尔型(true或false)
  • Object    对象(在花括号中,元素之间以逗号分隔){ "name" : "Rain" , "age" : "27" }
  • Array     数组(在方括号中,元素之间以逗号分隔)[ "1" , "2" , "3" ]
  • null        空值

补充:Object表示对象,类似于C语言中的结构体,以花括号{}括起来,其元素要求位键值对,其中key必须为String类型的,而value可以是任何类型。key和value之间以 : 表示映射关系。

目前最常用的三种json解析方式:

1)普通的json jar 包

 <!-- https://mvnrepository.com/artifact/org.json/json -->
    <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20160810</version>
    </dependency>

2)阿里的fastjson jar包

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.47</version>
    </dependency>

3)谷歌的gjson jar包

<!-- 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>

关于json的常见方法?

初始化(以fastJson为例):

public static void main(String[] args){
        //初始化
        //one:
        JSONObject obj1 = new JSONObject();
        obj1.put("name","Rain");
        obj1.put("age","18");
        System.out.println(obj1);

        //two:
        //参数默认为false,代表其内部维护的是HashMap,true则表示维护的是LinkedHashMap,即输出时按照put的顺序输出
        JSONObject obj2 = new JSONObject(true);
        obj2.put("age","18");
        obj2.put("name","Rain");
        System.out.println(obj2);

        //three:
        //因其内部维护的是Map,所以初始化不能直接使用对象
        Map<String,Object> map = new HashMap<>();
        map.put("name","Rain");
        map.put("age","18");
        JSONObject obj3 = new JSONObject(map);
        System.out.println(obj3);

        //four:
        String str = "{'name':'Rain','age':'18'}";
        JSONObject obj4 = JSONObject.parseObject(str);
        System.out.println(obj4);
    }

控制台输出:(重点注意下第二种)

{"name":"Rain","age":"18"}
{"age":"18","name":"Rain"}
{"name":"Rain","age":"18"}
{"name":"Rain","age":"18"}

  

Json对象转Json字符串,Json字符串转对象:

public static void main(String[] args){
        //json对象转字符串
        JSONObject obj1 = new JSONObject();
        obj1.put("name","Mei");
        obj1.put("age",18);
        //toString()与toJSONString()方法相同,具体可看class文件。
        String jsonStr1 = obj1.toJSONString();
        System.out.println(jsonStr1);

        //json字符串转json对象
        String jsonStr2 = "{'name':'Mei','age':18}";
        JSONObject obj2 = (JSONObject) JSONObject.parse(jsonStr2);
        System.out.println(obj2);

    }

ListMap转Json数组:

public static void main(String[] args){
        //ListMap转Json数组
        List<Map<String,String>> listMap = new ArrayList<>();
        Map<String,String> map = new HashMap<>();
        map.put("name","Mei");
        map.put("age","18");
        listMap.add(map);
        JSONArray jsonArray = JSONArray.fromObject(listMap);
        System.out.println(jsonArray);
    }

  

获取数据方法:

public static void main(String[] args) throws JSONException {
        JSONObject obj = new JSONObject();
        obj.put("name","Mei");
        obj.put("age","18");
        System.out.println("The name is: "+obj.getString("name"));
        System.out.println("The age is: "+obj.optString("age"));
     System.out.println("The sex is: "+obj.optString("sex","F"));
}

getString()和optString()方法都可以根据key获取对应value的值。区别在于,getString()获取如果key为空值会抛异常,optString()会返回空字符串 "" 或者指定的值。

实际开发中常用的四种json工具包的比较:

https://blog.csdn.net/jiyueqianxue/article/details/83377181

原文地址:https://www.cnblogs.com/Rain1203/p/11918181.html