GSONJsonParser类可以将 JSON 字符串或流解析为 Java 对象的树结构。
解析过程中会用到:JsonParse,JsonElement,还有 JsonObject 和 JsonArray。
简单说明:
1、JsonParse是一个解析类。它可以把 JSON 数据分别通过 getAsJsonObject 和 getAsJsonArray 解析成 JsonObject 和 JsonArray 。
2、JsonElement,是一个抽象类,代表 JSON 串中的某一个元素,可以是 JsonObject/JsonArray/JsonPrimitive/… 中的任何一种元素。
一.一层Json包含JsonObject的简单示例
"username":"YWRtaW4=",
"password":"bGlhblNoaTIwMjA="
1.创建一个jsonObject,通过JsonParser将 JSON 解析为树状结构
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
String jsonStr="{\"username\":\"YWRtaW4=\",\"password\":\"bGlhblNoaTIwMjA=\"}";
JsonObject jsonObject = JsonParser.parseString (jsonStr).getAsJsonObject();
2.有了上面的JsonObject实例,你就可以使用它的get() 方法从中提取节点的字段
JsonElement nameElement = jsonObject.get("username");
3.字段值转换成字符串元素
String username=nameElement.getAsString();
4.下面是一个完整的示例
String jsonStr="{\"username\":\"YWRtaW4=\",\"password\":\"bGlhblNoaTIwMjA=\"}";
JsonObject jsonObject = JsonParser.parseString (jsonStr).getAsJsonObject();
JsonElement nameElement = jsonObject.get("username");
String username=nameElement.getAsString();
System.out.println(username);
//上面代码,JsonElement也可以简写,示例
String jsonStr="{\"username\":\"YWRtaW4=\",\"password\":\"bGlhblNoaTIwMjA=\"}";
JsonObject jsonObject = JsonParser.parseString (jsonStr).getAsJsonObject();
String username=JsonParser.parseString (jsonStr).getAsJsonObject().get("username").getAsString();
System.out.println(username);
二.
二层
json包含
JsonObject的
简单
示例
"code": 0,
"data": {
"accessToken": "eyJhbGciOiJIUzUxMiJ9",
"expiresIn": 600
1、创建一个jsonObject,通过JsonParser将 JSON 解析为树状结构
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
String jsonStr="{\n" +
"\"code\": 0,\n" +
"\"data\": {\n" +
"\"accessToken\": \"eyJhbGciOiJIUzUxMiJ9\",\n" +
"\"expiresIn\": 600\n" +
"}\n" +
JsonObject jsonObject = JsonParser.parseString (jsonStr).getAsJsonObject();
2、有了第一层级的JsonObject实例,你就可以使用它的get() 方法从中获取第二层级的(JsonObject)
JsonElement dataElement = jsonObject.get("data");
JsonObject dataObject=dataElement.getAsJsonObject();
3、从第二层级的JsonObject,使用它的get() 方法从中提取节点的字段
JsonElement tokenElement=dataObject.get("accessToken");
String token=tokenElement.getAsString();
4、一个完整的示例代码:
String jsonStr="{\n" +
"\"code\": 0,\n" +
"\"data\": {\n" +
"\"accessToken\": \"eyJhbGciOiJIUzUxMiJ9\",\n" +
"\"expiresIn\": 600\n" +
"}\n" +
JsonObject jsonObject = JsonParser.parseString (jsonStr).getAsJsonObject();
JsonElement dataElement = jsonObject.get("data");
JsonObject dataObject=dataElement.getAsJsonObject();
JsonElement tokenElement=dataObject.get("accessToken");
String token=tokenElement.getAsString();
System.out.println(token);
//上面代码,JsonElement也可以简写,示例
JsonObject dataObject=jsonObject.get("data").getAsJsonObject();
String token=dataObject.get("accessToken").getAsString();
System.out.println(token);
三.
三层json包含
JsonArray的示例
"code": 0,
"data": {
"totalCount": 1,
"pageSize": 10,
"totalPage": 1,
"currPage": 1,
"list": [
"nosqlConnectionId": "1437248934484402178",
"connectionName": "mongotest",
"dataBaseType": "mongo",
"proxyPort": null,
"dataBaseName": "aoe_demo",
"listenAddress": null,
"nosqlConnectionDescribe": null
String jsonStr="{\n" +
" \"code\": 0,\n" +
" \"data\": {\n" +
" \"totalCount\": 1,\n" +
" \"pageSize\": 10,\n" +
" \"totalPage\": 1,\n" +
" \"currPage\": 1,\n" +
" \"list\": [\n" +
" {\n" +
" \"nosqlConnectionId\": \"1437248934484402178\",\n" +
" \"connectionName\": \"mongotest\",\n" +
" \"dataBaseType\": \"mongo\",\n" +
" \"proxyPort\": null,\n" +
" \"dataBaseName\": \"aoe_demo\",\n" +
" \"listenAddress\": null\n" +
" }\n" +
" ]\n" +
" }\n" +
JsonObject jsonObject = JsonParser.parseString (jsonStr).getAsJsonObject();
JsonElement dataElement = jsonObject.get("data");
JsonObject dataObject=dataElement.getAsJsonObject();
JsonElement listElement=dataObject.get("list");
JsonArray listArray=listElement.getAsJsonArray();
JsonObject list0=listArray.get(0).getAsJsonObject();
String nosqlConnectionId=list0.get("nosqlConnectionId").getAsString();
System.out.println(nosqlConnectionId);
//上面代码,JsonElement和JsonArray也可以简写,示例
JsonObject jsonObject = JsonParser.parseString (jsonStr).getAsJsonObject();
JsonObject dataObject=jsonObject.get("data").getAsJsonObject();
JsonArray listArray=dataObject.get("list").getAsJsonArray();
String nosqlConnectionId=listArray.get(0).getAsJsonObject().get("nosqlConnectionId").getAsString();
System.out.println(nosqlConnectionId);
四、四层Json包含JsonArry树结构
"code": 0,
"data": {
"nosqlConnectionId": "1437248934484402178",
"proxyPort": null,
"dataBaseName": "aoe_demo",
"workMode": null,
"kmsKeyId": "1437240215994392578",
"collectionList": [
"collectionName": "table1",
"documentList": [
"mongoStrategyId": "1437248937915342849",
"keyName": "$.1col",
"type": "2",
"typeName": "STRING",
"algorithm": "AES_GCM",
"algorithmName": "AES加密",
"metadata": "422e7feea8567581a51271fff29c9528",
"iv": "3509c87ed2d3783b908f622ba4fcda8e",
"ds": "NONE",
"enabled": true
例如:获取documentList中第一个json的key:mongoStrategyId的value值
String jsonStr="{\n" +
" \"code\": 0,\n" +
" \"data\": {\n" +
" \"nosqlConnectionId\": \"1437248934484402178\",\n" +
" \"proxyPort\": null,\n" +
" \"dataBaseName\": \"aoe_demo\",\n" +
" \"workMode\": null,\n" +
" \"kmsKeyId\": \"1437240215994392578\",\n" +
" \"collectionList\": [\n" +
" {\n" +
" \"collectionName\": \"table1\",\n" +
" \"documentList\": [\n" +
" {\n" +
" \"mongoStrategyId\": \"1437248937915342849\",\n" +
" \"keyName\": \"$.1col\",\n" +
" \"type\": \"2\",\n" +
" \"typeName\": \"STRING\",\n" +
" \"algorithm\": \"AES_GCM\",\n" +
" \"algorithmName\": \"AES加密\",\n" +
" \"metadata\": \"422e7feea8567581a51271fff29c9528\",\n" +
" \"iv\": \"3509c87ed2d3783b908f622ba4fcda8e\",\n" +
" \"ds\": \"NONE\",\n" +
" \"enabled\": true\n" +
" }\n" +
" ]\n" +
" }\n" +
" ]\n" +
" }\n" +
"}\n" +
"\n";
JsonObject jsonObject = JsonParser.parseString (jsonStr).getAsJsonObject();
JsonElement dataElement = jsonObject.get("data");
JsonObject dataObject=dataElement.getAsJsonObject();
JsonElement listElement=dataObject.get("collectionList");
JsonArray listArray=listElement.getAsJsonArray();
JsonObject listjson=listArray.get(0).getAsJsonObject();
JsonArray documentList=listjson.get("documentList").getAsJsonArray();
JsonObject documentList0=documentList.get(0).getAsJsonObject();
String mongoStrategyId=documentList0.get("mongoStrategyId").getAsString();
System.out.println(mongoStrategyId);
//上面代码,JsonElement和JsonArray也可以简写,示例
JsonObject jsonObject = JsonParser.parseString (jsonStr).getAsJsonObject();
JsonObject dataObject=jsonObject.get("data").getAsJsonObject();
JsonArray listArray=dataObject.get("collectionList").getAsJsonArray();
JsonArray documentList=listArray.get(0).getAsJsonObject().get("documentList").getAsJsonArray();
String mongoStrategyId=documentList.get(0).getAsJsonObject().get("mongoStrategyId").getAsString();
System.out.println(mongoStrategyId);
//上面代码,JsonElement和JsonArray也可以简写,示例
JsonObject jsonObject = JsonParser.parseString (jsonStr).getAsJsonObject();
JsonObject dataObject=(JsonObject)jsonObject.get("data");
JsonArray listArray=(JsonArray)dataObject.get("collectionList");
JsonArray documentList=(JsonArray)listArray.get(0).getAsJsonObject().get("documentList");
JsonObject document=(JsonObject)documentList.get(0);
String mongoStrategyId=document.get("mongoStrategyId").getAsString();
System.out.println(mongoStrategyId);
三.其他遇到的问题:
使用JsonParser jsonParser = new JsonParser();时提示:java new jsonparser_JsonParser 已弃用
是从2.8.6开始就弃用了,改成上面示例。
java new jsonparser_JsonParser 已弃用(参考)
https://blog.csdn.net/weixin_39735166/article/details/114729312
参考:
https://www.mk2048.com/blog/blog_haibbjac1hcb.html
https://fighter3.blog.csdn.net/article/details/106452324
https://blog.csdn.net/anshengsuiyeu/article/details/81214837
https://blog.csdn.net/ming2316780/article/details/51172872
import com.google.
gson
.
Gson
;
import com.google.
gson
.
Json
Array;
import com.google.
gson
.
Json
Element;
import com.google.
gson
.
Json
Object;
import com.google.
gson
.
JsonP
arser
;
impor...
使用google-
gson
类库
解析
json
文件 使用
JsonP
arser
解析
器来
解析
字符串
和输入流,变成
json
对象
代码如下: public class Read
json
{ public stat...
不要使用注释来生成
解析
器。 但使用 Scala 原始值,如:
lazy val Tag = ObjectType ( " Tag " , Seq (
Field ( " value " , " value " , StringType ),
Field ( " category " , " category " , StringType )))
一个小缺点是,如果数据是递归的,则需要在构造函数之外链接递归数据
你可以编写转换器代码来在类型之间进行转换,所以基本上你可以拥有所有的东西,所以基本上你可以在
解析
时注入任何你想要的代码:
lazy val ApiTimeStringToDate = ConvertedType ( StringType ,
Java
Object
public static String beanTo
JSON
String(Object bean) {
return new
Gson
().to
Json
(bean);
关于
GSON
的入门级使用,这里就不提了,如有需要可以看这篇博文
《Google
Gson
的使用方法,实现
Json
结构的相互转换》 ,写的很好,通俗易懂。
我为什么写这篇文章呢?因为前几晚跟好友
xiasuhuei321
JSON
(
Java
Script Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器
解析
和生成。
Gson
是Google提供的用来在
Java
对象
和
JSON
数据之间进行映射的
Java
类库。可以将一个
JSON
字符串
转成一个
Java
对象
(反序列化),或者反过来(序列化)。
GSON
地址:google/
gson
(github.com)
引入
GSON
:
implementation 'com.google.code.
gson
:
gson
:2.9
gson
工具在转换
json
字符串
的时候非常方便,一种是常常用到的转换成
对象
的方式,还有一种是使用类似原生的转换方式,两种都有各自的好处以及各自的应用场景,第一种往往是针对
对象
字段比较稳定,不会经常变更时使用,而且更偏向于面向
对象
的原则,第二种更多是针对字段容易频繁修改,即内容不稳定的
json
串,如日志打点记录的场景,所以此时就会用到
JsonP
arser
来做一些通用的转换
偶然发现
Gson
还有
JsonP
arser
这个
解析
类,下面写一个例子尝试使用:
String
json
String="{'flag':true,'data':{'name':'张三','age':18,'deleteFlag':false}}";
// 获得
解析
者
JsonP
arser
p
arser
=new
JsonP
arser
();
// 获得 根节点元素
Json
Elem