定义?
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