• 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

  • 相关阅读:
    BZOJ 4716 假摔
    【UER #4】量子态的棋盘
    [Lydsy2017省队十连测]最长路径
    [Lydsy2017省队十连测]航海舰队
    [Lydsy2017省队十连测]公路建设
    [Lydsy2017省队十连测]商店购物
    湖南省队集训题【2018】(我也不知道是第几场)
    CXMS 胡策2
    [TJOI2018]异或
    TJOI 2018 数学计算
  • 原文地址:https://www.cnblogs.com/Rain1203/p/11918181.html
Copyright © 2020-2023  润新知