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