您的位置:首页 > Web前端 > JavaScript

使用Gson解析复杂、变态的Json数据(包含中文key)

2018-01-04 18:00 495 查看
使用Gson解析复杂、变态的Json数据(包含中文key)

原文地址:http://www.cnblogs.com/bianmajiang/p/3998083.html

接口文档: 

请求数据
json={"uid":"","sid":"","ver":"1",
"request":{}
}
1
2
3

返回数据
{"ret":0,
"response":{
"tag_category":{
"中国画":{
"年代":["先秦两汉","战国楚国","魏晋南北","隋唐五代","南宋北宋","元代","明清","近现代","年代不详","其他"],
"技法":["泼墨","工笔","写意","白描","写生","皴法","没骨","指头画","其他"],
...
},
"书法":{
"分类":["书法","碑帖","写本写经","书札文牍","其他"],
"书体":["篆书","隶书","楷书","草书","行书","其他"],
...
},
...
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

首先自然想到封装成JavaBean。

注意点:

1、内部嵌套的类必须是static的,要不然解析会出错;

2、类里面的属性名必须跟Json字段里面的Key一模一样;

3、因为Json字段里面的Key存在中文,所以必须在相应的字段上使用@SerializedName(“中国画”)注解,给Key取别名。

4、内部嵌套用{}嵌套的就定义为 public ChinaPicture chinaPicture,用[]括起来的部分是一个List,所以定义为 public List years。 

5、如果不想写get和set方法,只需要将字段定义成public。
public class JsonBean {
public int ret;
public Response response;

public static class Response {
public TagCategory tag_category;

public static class TagCategory {

@SerializedName("中国画")
public ChinaPicture chinaPicture;
/**
* 中国画
*/
public static class ChinaPicture {
@SerializedName("年代")
public List<String> years;
@SerializedName("技法")
public List<String> techniques;
@SerializedName("题材")
public List<String> topic;
@SerializedName("规格")
public List<String> specification;
}

@SerializedName("书法")
public Calligraphy calligraphy;
/**
* 书法
*/
public static class Calligraphy {
@SerializedName("分类")
public List<String> classification;
@SerializedName("书体")
public List<String> chirography;
@SerializedName("规格")
public List<String> specification;
}

@SerializedName("西方绘画")
public WesternPicture westernPicture;
/**
* 西方绘画
*/
public static class WesternPicture {
@SerializedName("技法")
public List<String> techniques;
@SerializedName("题材")
public List<String> topic;
}

@SerializedName("邮品")
public Stamps stamps;
/**
* 邮品
*/
public static class Stamps {
@SerializedName("分类")
public List<String> classification;
@SerializedName("规格")
public List<String> specification;
}

@SerializedName("钱币")
public Money money;
/**
* 钱币
*/
public static class Money {
@SerializedName("分类")
public List<String> classification;
@SerializedName("国家")
public List<String> country;
@SerializedName("规格")
public List<String> specification;
}

@SerializedName("瓷器")
public China china;
/**
* 瓷器
*/
public static class China {
@SerializedName("年代")
public List<String> years;
@SerializedName("分类")
public List<String> classification;
}

@SerializedName("紫砂壶")
public Teapot teapot;
/**
* 紫砂壶
*/
public static class Teapot {
@SerializedName("规格")
public List<String> specification;
@SerializedName("泥料")
public List<String> pug;
@SerializedName("工艺")
public List<String> crafts;
@SerializedName("行业")
public List<String> industry;
}

@SerializedName("金银铜器")
public MetalTool metalTool;
/**
* 金银铜器
*/
public static class MetalTool {
@SerializedName("年代")
public List<String> years;
@SerializedName("分类")
public List<String> classification;
}

@SerializedName("木器家具")
public WoodFurniture woodFurniture;
/**
* 木器家具
*/
public static class WoodFurniture {
@SerializedName("材质")
public List<String> material;
@SerializedName("器型")
public List<String> Shape;
}

@SerializedName("玉石翡翠")
public Emerald emerald;
/**
* 玉石翡翠
*/
public static class Emerald {
@SerializedName("材质")
public List<String> material;
@SerializedName("镶嵌")
public List<String> inlay;
@SerializedName("分类")
public List<String> classification;
}

@SerializedName("红木文玩")
public RedWoodHeritage redWoodHeritage;
/**
* 红木文玩
*/
public static class RedWoodHeritage {
@SerializedName("分类")
public List<String> classification;
@SerializedName("材质")
public List<String> material;
}

@SerializedName("杂项")
public OtherItems otherItems;
/**
* 杂项
*/
public static class OtherItems {
@SerializedName("年代")
public List<String> years;
}
}
}
}
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Gson解析