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

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

  1. java json html 转义字符,JAVA之带转义字符的json字符串解析

    Json数据: { "ret": "0", "Weathers": "[{\"date\":\"20 ...

  2. json数据解析与JAVA对象转换以及在JQUERY中的使用

    JSON基础了解 JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小 ...

  3. 将html代码确析成json数据格式,JSON字符串解析成JSON数据格式

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...

  4. 【解决】json字符串解析失败json.decoder.JSONDecodeError

    解决json解析失败报错:json.decoder.JSONDecodeError 最近遇到一个json字符串解析失败的问题,原因是json里面的":这个两个符合和一些特殊符号在搞鬼,报错如 ...

  5. Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象

    文章目录 后端部分 前端部分 后端部分 Option op = new Option("海淀","hd");//java对象转换json对象 JSONObjec ...

  6. 下划线JSON字符串与驼峰Java Bean相互转换

    下划线JSON字符串与驼峰Java Bean相互转换 1.实体类 package com.example.springboottest.domain;/*** @author mac* @title: ...

  7. Gson().fromJson将json字符串转成对象时,执行非常慢,原因可能是版本的问题

    Gson().fromJson将json字符串转成对象时,执行非常慢,原因可能是版本的问题 1.将1.3的版本升级成1.7的,转换速度就非常快了 附: json数据大小

  8. Java系列之:生成Json字符串

    Java系列之:生成Json字符串 一.拼接Json字符串 二.使用JSONObject()生成字符串 一.拼接Json字符串 import com.alibaba.fastjson.JSONObje ...

  9. js中json字符串解析

    在开发过程中,经常会用到Json字符串,有时需要对前端传过来的json串解析,或者把前端数据以json字符串的形式传送给后端,下面我们来看一下各方面的应用. 1.JSON格式和JS格式 //JS对象 ...

最新文章

  1. df满足条件的值修改_文科生学 Python 系列 16:泰坦尼克数据 2(缺失值处理)
  2. TensorFLow能够识别的图像文件,可以通过numpy
  3. http php mysql_apache+php+mysql
  4. r语言和python-R VS Python:R语言是否真的过时了?
  5. 日常SQL常见问题(二)
  6. 冯诺依曼架构的 IO 鸿沟,谁能来填补?
  7. 为DedeCms的RSS生成绝对地址
  8. chrome修改js数据怎么生效_chrome浏览器中 F12 功能的简单介绍
  9. 人生也要一个中心两个基本点(转载)
  10. java四个基本步骤_javac编译的四个主要的流程
  11. starting Tomcat v8.5 at localhost has encountered a problem
  12. linux安装软件系列之yum安装
  13. iPad忘记密码时恢复出厂设置
  14. IT行业前景怎么样,你还有机会吗?
  15. linux drwxr-xr-x 什么意思
  16. 华为ensp联动Wmware虚拟机Openstack平台实现Vlan网络模式
  17. DICOM 图像传输:使用 LeadTools 实现 C-Store SCP 服务
  18. SPM提取大脑surface
  19. 什么是BFC?如何触发BFC
  20. android 工作记事本

热门文章

  1. C语言知识-零零散散(三)
  2. Mysterious Bacteria(唯一质因子解+素数筛)
  3. git 修改远端 commit 信息
  4. 小波变换比傅里叶变换好在哪里_小波变换与傅里叶变换详解——代码下载——非平稳信号与平稳信号的滤波效果对比
  5. MAVEN的安装与配置教程(超详细版)
  6. 用数据说话,看中国49个地方(省、市、高新区)集成电路产业实力情况
  7. 【python】通过信号机制对子进程进行控制
  8. 贝叶斯统计推断(一)
  9. 创新实训(46)——基于ElasticSearch的Completion Suggest实现搜索提示
  10. 腾讯御安全深度解析新型流量盗刷病毒家族