GSON 多层Map剥离
时间:2022-05-03
本文章向大家介绍GSON 多层Map剥离,主要内容包括12.2. com.google.gson、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
工作中遇到一个问题,我们提供给外包方的 json 无法Decode 。
一段简单 JSON 字符串,字符串如下。
String json= "{"0":{"id":"2","category_id":"1","title":"Test2","author":"","ctime":"2016-03-05 11:59:56"},"1":{"id":"1","category_id":"1","title":"Test1","author":"u6d4bu8bd5","ctime":"2016-03-05 11:57:30"},"pages":{"count":2,"first":0,"last":0,"before":0,"current":0,"next":0,"total":0}}";
对方话费了大量时间解决不了问题。后来说请了 “新浪” 高手过来(让我想到周星驰电影,他们请来大内高手高手高高手)。看后也无能为力,说我们JSON 字符串不符合JSON标准规范。
我无语!啥也不说了,帮你们写一个例子吧。
12.2. com.google.gson
https://github.com/google/gson
首先看看怎么剥离一层Map
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sender</groupId>
<artifactId>sender</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Sender</name>
<description>EDM</description>
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
package io.github.netkiller;
import java.util.HashMap;
import java.util.Map;
import com.google.gson.*;
public class GsonTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Gson gson = new Gson();
String json = "{"k1":"v1","k2":"v2"}";
Map<String, String> map = new HashMap<String, String>();
map = (Map<String, String>) gson.fromJson(json, map.getClass());
System.out.println(map.get("k1"));
}
}
12.2.1. 多层 Map 剥离
Gson gson = new Gson();
String json= "{"0":{"id":"2","category_id":"1","title":"Test2","author":"","ctime":"2016-03-05 11:59:56"},"1":{"id":"1","category_id":"1","title":"Test1","author":"u6d4bu8bd5","ctime":"2016-03-05 11:57:30"},"pages":{"count":2,"first":0,"last":0,"before":0,"current":0,"next":0,"total":0}}";
Map<String, Map> map = new HashMap<String, Map>();
map = (Map<String, Map>) gson.fromJson(json, map.getClass());
System.out.println(map.get("1").get("title"));
System.out.println(map.get("pages").get("count"));
以上例子节选自 《Netkiller Java 手札》
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 采用 Vue 编写的功能强大的 Swagger-ui 页面
- Spring Data REST不完全指南(三)
- Spark Kafka 基于Direct自己管理offset
- 使用Reactor响应式编程
- 多场景下MySQL临时表的作用
- Flink 自定义触发器实现带超时时间的 CountWindow
- 聊聊Spring Boot Actuator
- [译]按功能(特性)分包
- Spring Boot Admin简介及实践
- Spring Boot Admin实现服务健康预警
- 除了FastJson,你也应该了解一下Jackson(二)
- 除了FastJson,你也应该了解一下Jackson(一)
- JavaScript性能优化总结
- Spring Boot2+Resilience4j实现容错之Bulkhead
- [译]高性能缓存库Caffeine介绍及实践