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