Java(24):GSON - JsonParser将 JSON 字符串解析为 Java 对象的树结构

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁儿数据安全

您的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值