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

本文涉及的产品
云解析DNS-重点域名监控,免费拨测 20万次(价值200元)
简介: 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));
        });
    }
  • 效果

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

相关文章
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
942 0
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
1013 2
|
JavaScript
js 解析 byte数组 成字符串
js 解析 byte数组 成字符串
373 5
|
9月前
|
存储 机器学习/深度学习 缓存
🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
301 11
|
9月前
|
Web App开发 移动开发 前端开发
React音频播放器样式自定义全解析:从入门到避坑指南
在React中使用HTML5原生&lt;audio&gt;标签时,开发者常面临视觉一致性缺失、样式定制局限和交互体验割裂等问题。通过隐藏原生控件并构建自定义UI层,可以实现完全可控的播放器视觉风格,避免状态不同步等典型问题。结合事件监听、进度条拖拽、浏览器兼容性处理及性能优化技巧,可构建高性能、可维护的音频组件,满足跨平台需求。建议优先使用成熟音频库(如react-player),仅在深度定制需求时采用原生方案。
389 12
|
12月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
744 0
在Java中处理JSON数据:Jackson与Gson库比较
|
弹性计算 网络协议 Ubuntu
如何在阿里云国际版Linux云服务器中自定义配置DNS
如何在阿里云国际版Linux云服务器中自定义配置DNS
|
程序员 开发者 Python
深度解析Python中的元编程:从装饰器到自定义类创建工具
【10月更文挑战第5天】在现代软件开发中,元编程是一种高级技术,它允许程序员编写能够生成或修改其他程序的代码。这使得开发者可以更灵活地控制和扩展他们的应用逻辑。Python作为一种动态类型语言,提供了丰富的元编程特性,如装饰器、元类以及动态函数和类的创建等。本文将深入探讨这些特性,并通过具体的代码示例来展示如何有效地利用它们。
245 0
|
2月前
|
JSON API 数据格式
淘宝拍立淘按图搜索API系列,json数据返回
淘宝拍立淘按图搜索API系列通过图像识别技术实现商品搜索功能,调用后返回的JSON数据包含商品标题、图片链接、价格、销量、相似度评分等核心字段,支持分页和详细商品信息展示。以下是该API接口返回的JSON数据示例及详细解析:

推荐镜像

更多
  • DNS