接口文档:

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. 在word中批量更改Mathtype公式的格式

    方法参照下面这个链接 还有这个方法

  2. s21day21 python笔记

    s21day21 python笔记 一.内容回顾及补充 内置函数补充 type():查看数据类型 class Foo: pass obj = Foo() if type(obj) == Foo: pr ...

  3. Python全栈之路----常用模块----subprocess模块

    我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python ...

  4. php中include和require的区别(整理)

      require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 requi ...

  5. SQL学习 存储过程&DUAL表

    CREATE OR REPLACE PROCEDURE 存储过程 转自 https://www.cnblogs.com/lideng/p/3427822.html oracle中dual表的用途介绍 ...

  6. day-10初级函数

    函数 函数的定义 函数:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数-- 现实中:很多问题要通过一些工具进行处理 => 可以将工具提前生产出来并命名=> 通 ...

  7. [转]Python机器学习笔记 异常点检测算法——Isolation Forest

    Isolation,意为孤立/隔离,是名词,其动词为isolate,forest是森林,合起来就是“孤立森林”了,也有叫“独异森林”,好像并没有统一的中文叫法.可能大家都习惯用其英文的名字isolat ...

  8. dd/MMM/yyyy:hh:mm:ss +0800日期格式的转化

    private static void myHandler() throws ParseException { String dtime1 = "23/Apr/2019:04:08:00 + ...

  9. python实现将字符串中以大写字母开头的单词前面添加“_”下划线

    在工作中写测试用例代码生成的时候,函数命令考虑采用参数文件的名称来命名,但是发现文件命名是驼峰的写写法,所以想按照字符串中的大写字母做分割,每个单词前面添加下划线,主要考虑采用正则的模式来匹配,替换然 ...

  10. wireless

    思科的AP分为胖AP和瘦AP,但其实只是AP中的Image不一样而已,硬件都是一样的,胖AP和瘦AP之间可以互相转换.即使你下单的时候下的是胖AP,拿到货要当瘦AP用,转换一下即可. [相互转换] 详 ...