gson自定义Type解析json数组字符串

简介: gson自定义Type解析json数组字符串


前言

gson解析很好用。

string转对象,可以用

new Gson().fromJson(jsonString,object.class);

对象转String可以使用

String str = gson.toJson(user);

怎么将json数组字符串转成对象list呢?

比如下面的json。嵌套很深。

  • 要转的字符串
[
  {
    "label": "您的驾驶证类型",
    "type": "numberfield",
    "value": "",
    "required": true,
    "order": 2,
    "placeHolder": "",
    "selectOption": [
      {
        "itemValue": "1",
        "itemName": "看书"
      }
    ]
  },
  {
    "label": "您当前驾驶车型",
    "type": "numberfield",
    "value": "",
    "required": true,
    "order": 2,
    "placeHolder": "",
    "selectOption": [
      {
        "itemValue": "1",
        "itemName": "看书"
      }
    ]
  },
  {
    "label": "您当前车辆品牌",
    "type": "numberfield",
    "value": "",
    "required": true,
    "order": 2,
    "placeHolder": "",
    "selectOption": [
      {
        "itemValue": "1",
        "itemName": "看书"
      }
    ]
  },
  {
    "label": "您当前所在省市",
    "type": "numberfield",
    "value": "",
    "required": true,
    "order": 2,
    "placeHolder": "",
    "selectOption": [
      {
      "itemValue": "1",
      "itemName": "看书"
      }
    ]
  }
,
  {
    "label": "海选赛举办城市",
    "type": "numberfield",
    "value": "",
    "required": true,
    "order": 2,
    "placeHolder": "",
    "selectOption": [
      {
        "itemValue": "1",
        "itemName": "看书"
      }
    ]
  }
]

答: 自定义TypeToken

实战

  • 实体类
    CustomFieldDTO
/**
 * 活动自定义字段
 */
@NoArgsConstructor
@Data
public class CustomFieldDTO {
    @JsonProperty("label")
    private String label;
    @JsonProperty("type")
    private String type;
    @JsonProperty("value")
    private String value;
    @JsonProperty("required")
    private Boolean required;
    @JsonProperty("order")
    private Integer order;
    @JsonProperty("placeHolder")
    private String placeHolder;
    @JsonProperty("selectOption")
    private List<SelectOptionDTO> selectOption;
    @NoArgsConstructor
    @Data
    public static class SelectOptionDTO {
        @JsonProperty("itemValue")
        private String itemValue;
        @JsonProperty("itemName")
        private String itemName;
    }
}
  • 自定义typeToken转换
@Test
    public void testPrintMessage() {
        Gson gson = new Gson();
        //转成json数组
        //自定义类型转换
        Type type = new TypeToken<List<CustomFieldDTO>>() { }.getType();
        //解析
        List<CustomFieldDTO> list = gson.fromJson(str, type);
        //遍历打印
        list.parallelStream().forEach((item) -> {
            logger.info(String.valueOf(item));
        });
    }
  • 效果

    看出解析出结果了。
    代码很优雅,不用一个字段一个字段的处理。推荐!!!

相关文章
|
24天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
52 1
|
1月前
|
JSON JavaScript 前端开发
C++ 智能指针与 JSON 处理:高级编程技巧与常见问题解析
C++ 智能指针与 JSON 处理:高级编程技巧与常见问题解析
269 0
|
2天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
5天前
|
JSON 运维 Kubernetes
云效产品使用报错问题之流水线中配置了AppStack,构建时下载的制品内容为json字符串,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
14天前
|
存储 JSON JavaScript
「Python系列」Python JSON数据解析
在Python中解析JSON数据通常使用`json`模块。`json`模块提供了将JSON格式的数据转换为Python对象(如列表、字典等)以及将Python对象转换为JSON格式的数据的方法。
31 0
|
25天前
|
JSON 数据格式
Json字符串与QVariantList 对象相互转换
Json字符串与QVariantList 对象相互转换
7 0
|
1月前
|
JSON JavaScript 数据格式
【深入探究C++ JSON库】解析JSON元素的层级管理与遍历手段
【深入探究C++ JSON库】解析JSON元素的层级管理与遍历手段
95 2
|
1月前
|
XML JSON API
深入解析C++ JSON库:nlohmann::json:: parse的内部机制与应用
深入解析C++ JSON库:nlohmann::json:: parse的内部机制与应用
52 0
|
3月前
|
JSON PHP 数据格式
|
1月前
|
存储 JSON Apache
揭秘 Variant 数据类型:灵活应对半结构化数据,JSON查询提速超 8 倍,存储空间节省 65%
在最新发布的阿里云数据库 SelectDB 的内核 Apache Doris 2.1 新版本中,我们引入了全新的数据类型 Variant,对半结构化数据分析能力进行了全面增强。无需提前在表结构中定义具体的列,彻底改变了 Doris 过去基于 String、JSONB 等行存类型的存储和查询方式。
揭秘 Variant 数据类型:灵活应对半结构化数据,JSON查询提速超 8 倍,存储空间节省 65%

推荐镜像

更多