JAVA Json 学习总结

Json官网

在线Json解析工具

文章目录

  • 一、Json 概述
  • 二、Json 的解析方式
  • 三、java 处理 json 数据
    • 1、json中的数组和对象
    • 2、JSONArray和JSONObject的常用方法
    • 3、基本的JSONArray和JSONObject操作
    • 4、由java自带的数据结构转换为JSON文本
    • 5、读取JSON文件

一、Json 概述

简介

       JavaScript Object Notation,简写为JSON,是一种轻量级的数据交换格式,它基于JavaScript的一个子集。有着让人一目了然的数据格式,让我们在编写和阅读更加容易,也更易于机器解析。
       JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为了理想的数据交换语言。
  • JSON由两种结构组成:

    • 键值对的无序集合——对象(或者叫记录、结构、字典、哈希表、有键列表或关联数组等)
    • 值的有序列表——数组
  • json 的格式:

    • 对象是一个无序键值对的集合,以"{“开始,同时以”}“结束,键值对之间以”:“相隔,不同的键值对之间以”,"相隔,举例
{
    "json1" : 1,
    "json2" : "string",
    "json3" :
            {
             "json3-1" : 1,
             "json3-2" : "string"
            }
}

二、Json 的解析方式

  • Gson:谷歌公司推出的Json解析工具

    • Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。

    • 类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。

Gson详解用法1
Gson详解用法2

  • FastJson:阿里巴巴推出的Json解析工具

    • FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。

    • FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。

  • Jackson:Jackson是比较著名的一个解析工具

    • Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架

    • Jackson 社 区相对比较活跃,更新速度也比较快,是最流行的 json 解析器之一


  • 区别

    • FastJson的性能优于Gson,但是处理复杂类型时可能会出现一些错误,到现在还有很多BUG没修。
    • Gson的功能非常的齐全。
    • Jakson性能也非常出色,但是将核心功能拆分成三个模块,有Jar依赖。

三、java 处理 json 数据

1、json中的数组和对象

  • 1.数组(JsonArray)
    • 数组用一对[],表示存放的是数组数据。 如:[“1”,“2”,“3”],表示这是一个JSONArray数组。
  • 2.对象(JsonObject)
    • 对象用一对{},来表示其中JSON通用的”键-值“对。如:{“sex1”:“female”,“name0”:“zhangsan”},表示的是一个JSON对象,里面有两组数据(键值对),sex1=female,name0=zhangsan。这里键对应的数据值,也可以是复杂的JSON对象或者数组。

2、JSONArray和JSONObject的常用方法


  • JSONObject 常用方法

    1 解析字符串
    	JSONObject  obj = JSONArray.parseObject(str);
    
    2  存值取值
       (1) 存值
    		 obj.put("key", key);
    		 obj.put("value", value);
    
       (2) 取值
       		 value = obj.get(key);
    
    3String字符串转换
    	    toJSONString() /toString():JSONObject对象转换为json的字符串
    
    4  格式:
    	本质是对象, 用 {} 表示
    	格式:  {key:value}
    	
    

  • JSONArray 常用方法

    1  解析字符串
    	 JSONArray jsonarr = JSONArray.parseArray(str);
    	 
    2  存值取值
    	(1) 存值
         	jsonarr.add(obj);
    
        (2) 取值
    		for(int i =0; i <= jsonarr.size(); i++){
    		 	jsonarr[i].get(key);
    	 	} 
    	
    3   格式: 
    	本质是数组, 必须是数组格式,[ ] 包裹数据 
    	格式:   [{key:value},{key:value}... ]
        	    ["str1","str2","str3",...]
    

3、基本的JSONArray和JSONObject操作

		import net.sf.json.JSONArray;
	    import net.sf.json.JSONObject;
	    
	    public class ObjectAndArray1 {
	        public static void main(String args[])
	        {
	            JSONObject jsonObj  = new JSONObject();
	            jsonObj.put("name0", "zhangsan");
	            jsonObj.put("sex1", "female");
	            System.out.println(jsonObj);    //输出为:{"sex1":"female","name0":"zhangsan"}
	            
	            JSONArray jsonArray = new JSONArray();
	            jsonArray.add("11");
	            jsonArray.add("22");
	            jsonArray.add("33");
	            System.out.println(jsonArray);    //输出为:["11","22","33"]
	        }
	    } 

4、由java自带的数据结构转换为JSON文本

	import java.util.HashMap;
    import java.util.Map;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
 
    public class ObjectAndArray2{
        public static void main(String args[])
        {
            //可以由数组,列表等生成JSONArray
            String list[]={"11","22"};
            JSONArray jsonarray = JSONArray.fromObject(list); 
            jsonarray.add("33");
            System.out.println(jsonarray);    //输出为:["11","22","33"]
            
            //可以由Map生成JSONObject
            Map<String,Object> map=new HashMap<String,Object>();
            map.put("NO1", "第一个");
            map.put("NO2", "第二个");
            map.put("NO3", jsonarray);
            JSONObject jsonObj  = JSONObject.fromObject(map);
            System.out.println(jsonObj);    //输出为:{"NO3":["11","22","33"],"NO2":"第二个","NO1":"第一个"}
        }
    }

5、读取JSON文件

  • 注意:
    • JSONArray 必须用下标读取内部数据。
    • JSONObject 必须用"键"读取对应的"值"。
	import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    
    public class ObjectAndArray {
        public static void main(String args[])
        {
            JSONArray jsonarray;
            JSONObject jsonObj;
            //读取JSONArray,用下标索引获取
            String array="[\"11\",\"22\",\"33\"]";
            jsonarray = JSONArray.fromObject(array); 
            System.out.println(jsonarray.getString(1));    //输出为:22
            
            //读取JSONObject
            String object="{\"NO1\":[\"44\",\"55\",\"66\"],\"NO2\":{\"NO1\":\"第一个\"}}";
            jsonObj  = JSONObject.fromObject(object);
            System.out.println(jsonObj.get("NO1"));    //输出为:["44","55","66"]
            
            jsonarray = (JSONArray)(jsonObj.get("NO1")); 
            System.out.println(jsonarray.getString(1));    //输出为:55
            
            //用"键"获取值
            jsonObj=(JSONObject)jsonObj.get("NO2");
            System.out.println(jsonObj);    //输出为:{"NO1":"第一个"}
            
        }
    }

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