1

fastjson-maven

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>

1.json字符串转对象

类型 对象= (类型)JSON.parseObject("json格式字符串", 类型.class);

2.数组json字符串转list

1
2
ArrayList<类型> list = JSON.parseObject("json格式字符串", new TypeReference<ArrayList<类型>>() {
});

3.格式化输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
对象转成json字符串输出,并且输出的字符串是格式化的跨越多行的。
JSONObject.toJSONString(object,true);

对象转成json字符串输出,但是只输出一行。
JSONObject.toJSONString(object);

给类配置一个toString方法,使得调用toString方法的时候,输出的是多行的格式化后的字符串,方面查看
public String toString() {
return JSONObject.fromObject(this).toString(4);
}

把一个JSON字符串进行格式化输出,逻辑就是先转换成对象,再输出。
Stirng content = json字符串
Strings=JSON.toJSONString(JSONObject.parseObject(content),true);

4.HTTP接口返回JSON格式字符串,不封装对象,将内部的对象数据转Map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import com.alibaba.fastjson.JSON;
// 以高德开放API接口返回的数据为例,得到gencodes内部list的数据,每个元素都封装成一个Map
public static void main(String[] args) {
String str = "{\n" +
" \"status\": \"1\",\n" +
" \"info\": \"OK\",\n" +
" \"infocode\": \"10000\",\n" +
" \"count\": \"1\",\n" +
" \"geocodes\": [\n" +
" {\n" +
" \"formatted_address\": \"北京市朝阳区阜通东大街|6号\",\n" +
" \"country\": \"中国\",\n" +
" \"province\": \"北京市\",\n" +
" \"citycode\": \"010\",\n" +
" \"city\": \"北京市\",\n" +
" \"district\": \"朝阳区\",\n" +
" \"township\": [],\n" +
" \"neighborhood\": { \n" +
" },\n" +
" \"building\": { \n" +
" },\n" +
" \"adcode\": \"110105\",\n" +
" \"street\": \"阜通东大街\",\n" +
" \"number\": \"6号\",\n" +
" \"location\": \"116.483038,39.990633\",\n" +
" \"level\": \"门牌号\"\n" +
" }\n" +
" ]\n" +
"}";
Map maps = (Map) JSON.parse(str);
List<Map> geocodes = (List<Map>) maps.get("geocodes");
for (Map<String,Object> gencode : geocodes) {
Object citycode = gencode.get("citycode");
System.out.println(citycode);
}
}