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

app配置
接口 client/init 请求数据
json={"uid":"","sid":"","ver":"1",
"request":{}
} 返回数据
{"ret":0,
"response":{
"tag_category":{
"中国画":{
"年代":["先秦两汉","战国楚国","魏晋南北","隋唐五代","南宋北宋","元代","明清","近现代","年代不详","其他"],
"技法":["泼墨","工笔","写意","白描","写生","皴法","没骨","指头画","其他"],
...
},
"书法":{
"分类":["书法","碑帖","写本写经","书札文牍","其他"],
"书体":["篆书","隶书","楷书","草书","行书","其他"],
...
},
...
}
}
}
备注 tag_category 标签分类

首先自然想到封装成JavaBean。
注意点:
1、内部嵌套的类必须是static的,要不然解析会出错;
2、类里面的属性名必须跟Json字段里面的Key一模一样;
3、因为Json字段里面的Key存在中文,所以必须在相应的字段上使用@SerializedName("中国画")注解,给Key取别名。
4、内部嵌套用{}嵌套的就定义为 public ChinaPicture chinaPicture,用[]括起来的部分是一个List,所以定义为 public List<String> 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;
}
}
}
}

使用Gson解析复杂、变态的Json数据(包含中文key)的更多相关文章
- python中jsonpath模块,解析多层嵌套的json数据
1. jsonpath介绍用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, ...
- 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题
1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...
- Android利用Gson解析嵌套多层的Json
参考:http://www.cnblogs.com/jxgxy/p/3677256.html 比如我们要解析一个下面这种的Json: String json = {"a":&quo ...
- iOS解析Server端返回JSON数据
在做quhao APP架构时,后台Server端使用了Java,提供WebService,而iOS和Android作为移动客户端.在做数据交互时,Server端返回JSON格式数据.由于iOS SDK ...
- Android解析中国天气接口JSon数据,应用于天气查询!
android解析Json数据是比较常见的一种操作.也是客户端和服务器进行数据交互的桥梁.下面就来看一看在android中解析JSon数据的方法吧. 首先要想获得Json数据,就必须访问相关的网络接口 ...
- Android 解析未知格式的json数据
1.递归一有的时候我们需要解析未知的json.或者说是动态的json.那么我们并不知道key具体是多少,或者说key不是固定的.这时候就需要解析动态key的方法. 这个方法是我在实现解析前台传入的js ...
- C#解析数组形式的json数据
在学习时遇到把解析json数据的问题,网上也搜了很多资料才得以实现,记录下来以便翻阅. 1. 下载开源的类库Newtonsoft.Json(下载地址http://json.codeplex.com/, ...
- phpStudy4——前端页面使用Ajax请求并解析php返回的json数据
项目需求: 在html页面显示所有用户列表信息. 需求分析: 1. html页面使用ajax向后端php请求用户数据 2. php脚本查询数据库,并将查询后的结果以json格式返回前端html页面 3 ...
- 控制层解析post请求中json数据的时候,有些属性值为空
原因: 1.默认json数据解析的时候,值会赋给键的首字母是小写的封装的bean中的属性,如果没有首字母小写的属性,也不会报错.即bean中有getXXX方法时,从json到model会增加xxx属性 ...
随机推荐
- datafactory5.6向mysql5.7添加大量测试数据
1.下载安装datafactory5.6 2.下载安装mysql5.7,并创建数据库guest_test和表sign_event 3.下载安装odbc5.3 4.打开datafactory配置数据源, ...
- AGV
AGV AGV是(Automated Guided Vehicle)的缩写,意即“自动导引运输车”,是指装备有电磁或光学等自动导引装置,它能够沿规定的导引路径行驶,具有安全保护以及各种移载功能的运输车 ...
- JS判断
/***************************************************************** 表单校验工具类 (linjq) ***************** ...
- js bind绑定事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Guangcong Wang王广聪的主页
请点击Guangcong Wang王广聪的主页更多信息.
- 【EMV L2】GPO响应以及AIP、AFL
[GPO命令] 终端通过GPO(Get Processing Options)命令 通知卡片交易开始.命令数据为PDOL指定的终端数据. [GPO响应] 卡片在GPO命令的响应中返回AIP和AFL:A ...
- easyui获取正在编辑行的代码
easyui获取正在编辑行的代码……没这个真不知道怎么搞0.0可能这问题还要弄半天……卧槽 ...等于是笔记下来 : var ed = $("dg").datagrid('get ...
- ios 当margin-left margin-right 超过设备宽度
ios 当margin-left margin-right过长,相加超过 超过设备宽度时,导致页面不能上下滚动,目前尚未找到解决办法,记录一下
- ArcGIS中的坐标系:基本概念和常用操作(二)
关于坐标系,上次的内容还没有结束. 上次已经解释清楚关于投影坐标系和地理坐标系的区别了,它们在实际应用上也有诸多不同. 下面这张图应该比较清晰 我们经常能发现,当计算面积时,提示面积已禁用,原因就在于 ...
- fiddler 一些不为人知的功能
1. fiddler的ctrl+F查找功能 可以进行正则表达式查找: 勾选Regular Expression,find中出现REGEX:,在这后面输入正则表达式即可进行匹配查找 2. fiddler ...