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