接口文档:

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. canvas 添加线和删除线 及获取相关位置信息源码

    其他相关链接: https://github.com/lusase/lineDrawer.git https://www.jb51.net/css/359062.html https://www.jb ...

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

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

  3. wxPython制作跑monkey工具(python3)

    一. wxPython制作跑monkey工具python文件源代码内容Run Monkey.py如下: #!/usr/bin/env python import wx import os import ...

  4. vmware虚拟机安装了linux(redhat)系统忘记登录密码怎么办

    今天,打开了以前装过的vmware虚拟机,正常启动之后,一直想不起登录密码,怎么都是登录不进去.然后在网上查找资料,最后重置了密码.下面,分享下具体操作过程. 1.重新启动虚拟机,在出现启动进度条时按 ...

  5. 【转载】 “强化学习之父”萨顿:预测学习马上要火,AI将帮我们理解人类意识

    原文地址: https://yq.aliyun.com/articles/400366 本文来自AI新媒体量子位(QbitAI)     ------------------------------- ...

  6. Pycharm 常用快捷键与设置

    pycharm高频率使用的快捷键 Ctrl+Shift+F10 运行当前的页面 Ctrl + / 注释(取消注释)选择的行 Ctrl+Shift+F 高级查找 Shift + Enter 开始新行 T ...

  7. JavaScript 浏览器中的事件

    1.事件的基本概念 事件是指在文档或者浏览器中发生的一些特定交互瞬间,比如打开某一个网页,浏览器加载完成后会触发 load 事件,当鼠标悬浮于某一个元素上时会触发 hover 事件,当鼠标点击某一个元 ...

  8. int与integer的区别

    int 是基本类型,直接存数值 integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者>>integer 是后者(也就是一个 ...

  9. python基础(五)

    一.os模块 import os# os.rename(old,new)#重命名# os.remove(f)#删除文件 # os.mkdir('china/beijing') #创建文件夹# os.m ...

  10. angularjs - 自定义指令(directive)

    自定义指令(directive) 使用 .directive 函数来添加自定义的指令. 要调用自定义指令,HTML 元素上需要添加自定义指令名. 例子:使用驼峰法来命名一个指令, demoDirect ...