接口文档:

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)的更多相关文章

  1. python中jsonpath模块,解析多层嵌套的json数据

    1. jsonpath介绍用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, ...

  2. 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

    1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

  3. Android利用Gson解析嵌套多层的Json

    参考:http://www.cnblogs.com/jxgxy/p/3677256.html 比如我们要解析一个下面这种的Json: String json = {"a":&quo ...

  4. iOS解析Server端返回JSON数据

    在做quhao APP架构时,后台Server端使用了Java,提供WebService,而iOS和Android作为移动客户端.在做数据交互时,Server端返回JSON格式数据.由于iOS SDK ...

  5. Android解析中国天气接口JSon数据,应用于天气查询!

    android解析Json数据是比较常见的一种操作.也是客户端和服务器进行数据交互的桥梁.下面就来看一看在android中解析JSon数据的方法吧. 首先要想获得Json数据,就必须访问相关的网络接口 ...

  6. Android 解析未知格式的json数据

    1.递归一有的时候我们需要解析未知的json.或者说是动态的json.那么我们并不知道key具体是多少,或者说key不是固定的.这时候就需要解析动态key的方法. 这个方法是我在实现解析前台传入的js ...

  7. C#解析数组形式的json数据

    在学习时遇到把解析json数据的问题,网上也搜了很多资料才得以实现,记录下来以便翻阅. 1. 下载开源的类库Newtonsoft.Json(下载地址http://json.codeplex.com/, ...

  8. phpStudy4——前端页面使用Ajax请求并解析php返回的json数据

    项目需求: 在html页面显示所有用户列表信息. 需求分析: 1. html页面使用ajax向后端php请求用户数据 2. php脚本查询数据库,并将查询后的结果以json格式返回前端html页面 3 ...

  9. 控制层解析post请求中json数据的时候,有些属性值为空

    原因: 1.默认json数据解析的时候,值会赋给键的首字母是小写的封装的bean中的属性,如果没有首字母小写的属性,也不会报错.即bean中有getXXX方法时,从json到model会增加xxx属性 ...

随机推荐

  1. vue 用户停留页面超过30分钟未操作 强制退出到登录页面

    先说下主要实现思路,通过给你的根节点绑定mouseover事件,首先声明下当前时间,每次滑过时记录下滑过的时间,两个时间转化成毫秒数,进行对比,如果超过30分钟,则清除token,跳转到login.h ...

  2. servlet之小demo(四)

    描述: 1.在web.xml文件中设置两个web应用的初始化参数,user和password 2.定义一个login.html,里面定义两个请求字段:user,password,发送请求到loginS ...

  3. Linux安装jdk-8u161-linux-x64

    最基本的操作,有一些细节需要处理,这次主要列出来步骤,其实步骤在网上一搜就有,这里只是根据个人的操作进行一些整合和注意事项的提醒罢了. 1.卸载原先的java jdk 这一步的目的是,很多Linux版 ...

  4. 如何才能在python的路上走得更远

    刚开始了新的课程,现在又没有什么心情学习了,不知点解就是提不起兴趣去学习,为什么呢?学习python如何才能提起劲,有什么方法可以提上劲学习?

  5. spring boot 单元测试

    Java新手 纯记录 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = OutDemoApplication.clas ...

  6. oc语言的Foundation框架(学习笔记2)

    紧接上文…… 4.集合对象 4.1数组 1.基本概念 Foundation中的数组(NSArray,NSMutableArray)是一组有序的对象集合,通过索引下标获取到数组中的各个元素,也分可变和不 ...

  7. vue.js 精学组件记录

    组件需要注册后才可以使用. Vue.component('my-component',{ template:'<div>这是组件内容</div>' }): 局部注册组件 var ...

  8. java的基础语法(标识符 修饰符 关键字)

    Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...

  9. 在java中,异常抛出点后程序的执行情况

    1.在throw语句,即自定义的抛出异常语句后面的代码并不会执行,会提示错误,编译器并不可以正常编译. 2.若在一个条件语句中抛出一个异常,程序可以编译,但不会运行(dead code). 3.若在一 ...

  10. 【Spring框架】<mvc:default-servlet-handler/>的作用

    优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...