首页 > 其他分享 >JOSN字符串字段遍历(json-path)

JOSN字符串字段遍历(json-path)

时间:2024-01-10 15:44:07浏览次数:41  
标签:name JOSN databaseName2 json params tableName1 databaseName path id

官网

https://github.com/json-path/JsonPath

依赖

<dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <version>2.5.0</version>
</dependency>

json字符串样例

{
	"execId": "123456",
	"params": [{
		"databaseName": [{
			"tableName1": [{
				"id": 123,
				"name": "aaa"
			}, {
				"id": 456,
				"name": "bbb"
			}]
		}, {
			"tableName2": [{
				"id": 123,
				"name": "nnn"
			}]
		}]
	}, {
		"databaseName2": [{
			"tableName1": [{
				"id": 123,
				"name": "aaa"
			}, {
				"id": 456,
				"name": "bbb"
			}]
		}]
	}]
}

遍历所有字段

String jsonString = "{\"execId\":\"123456\",\"params\":[{\"databaseName\":[{\"tableName1\":[{\"id\":123,\"name\":\"aaa\"},{\"id\":456,\"name\":\"bbb\"}]},{\"tableName2\":[{\"id\":123,\"name\":\"nnn\"}]}]},{\"databaseName2\":[{\"tableName1\":[{\"id\":123,\"name\":\"aaa\"},{\"id\":456,\"name\":\"bbb\"}]}]}]}";
Configuration configuration = Configuration.builder().options(Option.AS_PATH_LIST).build();
List<String> paths = JsonPath.using(configuration).parse(jsonString).read("$..*");
for (String path : paths) {
          System.out.println(path);
}
结果
$['execId']
$['params']
$['params'][0]
$['params'][1]
$['params'][0]['databaseName']
$['params'][0]['databaseName'][0]
$['params'][0]['databaseName'][1]
$['params'][0]['databaseName'][0]['tableName1']
$['params'][0]['databaseName'][0]['tableName1'][0]
$['params'][0]['databaseName'][0]['tableName1'][1]
$['params'][0]['databaseName'][0]['tableName1'][0]['id']
$['params'][0]['databaseName'][0]['tableName1'][0]['name']
$['params'][0]['databaseName'][0]['tableName1'][1]['id']
$['params'][0]['databaseName'][0]['tableName1'][1]['name']
$['params'][0]['databaseName'][1]['tableName2']
$['params'][0]['databaseName'][1]['tableName2'][0]
$['params'][0]['databaseName'][1]['tableName2'][0]['id']
$['params'][0]['databaseName'][1]['tableName2'][0]['name']
$['params'][1]['databaseName2']
$['params'][1]['databaseName2'][0]
$['params'][1]['databaseName2'][0]['tableName1']
$['params'][1]['databaseName2'][0]['tableName1'][0]
$['params'][1]['databaseName2'][0]['tableName1'][1]
$['params'][1]['databaseName2'][0]['tableName1'][0]['id']
$['params'][1]['databaseName2'][0]['tableName1'][0]['name']
$['params'][1]['databaseName2'][0]['tableName1'][1]['id']
$['params'][1]['databaseName2'][0]['tableName1'][1]['name']

有子节点的路径

String jsonString = "{\"execId\":\"123456\",\"params\":[{\"databaseName\":[{\"tableName1\":[{\"id\":123,\"name\":\"aaa\"},{\"id\":456,\"name\":\"bbb\"}]},{\"tableName2\":[{\"id\":123,\"name\":\"nnn\"}]}]},{\"databaseName2\":[{\"tableName1\":[{\"id\":123,\"name\":\"aaa\"},{\"id\":456,\"name\":\"bbb\"}]}]}]}";
Configuration configuration = Configuration.builder().options(Option.AS_PATH_LIST).build();
List<String> paths_ex = JsonPath.using(configuration).parse(jsonString).read("$..*[?(@.length != 0)]");
for (String path : paths_ex) {
            System.out.println(path);
       }
结果:
$['params'][0]
$['params'][1]
$['params'][0]
$['params'][1]
$['params'][0]['databaseName'][0]
$['params'][0]['databaseName'][1]
$['params'][0]['databaseName'][0]
$['params'][0]['databaseName'][1]
$['params'][0]['databaseName'][0]['tableName1'][0]
$['params'][0]['databaseName'][0]['tableName1'][1]
$['params'][0]['databaseName'][0]['tableName1'][0]
$['params'][0]['databaseName'][0]['tableName1'][1]
$['params'][0]['databaseName'][1]['tableName2'][0]
$['params'][0]['databaseName'][1]['tableName2'][0]
$['params'][1]['databaseName2'][0]
$['params'][1]['databaseName2'][0]
$['params'][1]['databaseName2'][0]['tableName1'][0]
$['params'][1]['databaseName2'][0]['tableName1'][1]
$['params'][1]['databaseName2'][0]['tableName1'][0]
$['params'][1]['databaseName2'][0]['tableName1'][1]

自定义匹配路径

String jsonString = "{\"execId\":\"123456\",\"params\":[{\"databaseName\":[{\"tableName1\":[{\"id\":123,\"name\":\"aaa\"},{\"id\":456,\"name\":\"bbb\"}]},{\"tableName2\":[{\"id\":123,\"name\":\"nnn\"}]}]},{\"databaseName2\":[{\"tableName1\":[{\"id\":123,\"name\":\"aaa\"},{\"id\":456,\"name\":\"bbb\"}]}]}]}";
Configuration configuration = Configuration.builder().options(Option.AS_PATH_LIST).build();
List<String> paths_s = JsonPath.using(configuration).parse(jsonString).read("$.params[*].databaseName2[*].tableName1[*].id");
        System.out.println("================");
        for (String path : paths_s) {
            System.out.println(path);
        }
结果:
$['params'][1]['databaseName2'][0]['tableName1'][0]['id']
$['params'][1]['databaseName2'][0]['tableName1'][1]['id']

标签:name,JOSN,databaseName2,json,params,tableName1,databaseName,path,id
From: https://www.cnblogs.com/moonpool/p/17956549

相关文章

  • 如何在 Python 中安装 json 模块
    Python是一种功能强大的编程语言,自带了许多标准库,其中json模块是用于处理JSON数据的模块。在Python中安装json模块非常简单,因为它是标准库的一部分,不需要额外的安装步骤。JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于阅读和编写,并且易于机器解析和生成。Python的......
  • JSON中带多余反斜杠?原来是滥用FastJSON造成的!
    以前对接很多老系统的接口是发现对方返回的JSON往往有些不太对劲,例如{"key_1":"A","key_2":"{\"name\":\"Tom\"}"}由于以前我使用springBoot自带的Jackson,因此从未自己造成这种现象,然而最近在对接一个接口时,我自己使用FastJSON时恰巧就复制了一模一样的bug:我当时就......
  • MySQL 8.0的SQL查询JSON返回的数据类型为字符串而非数组
    在MySQL8.0中,SQL查询JSON返回的数据类型确实是字符串,而不是数组。这是因为MySQL将JSON数据存储为字符串,并提供了一些函数和操作符来处理JSON数据。但是,你可以使用内置的JSON函数来处理返回的JSON字符串。例如,你可以使用JSON_EXTRACT函数来提取JSON字符串......
  • [ABC271E] Subsequence Path 题解
    [ABC271E]SubsequencePath题解思路解析很好的一道题,很有迷惑性,表面上是一道图论实际上是dp,定义\(f_{i}\)为从\(1\)到\(i\)的最短“好路”。先把每条边对应的起点,终点和边权记录下来,然后输入每个\(e\),由于是子序列顺序不会改变,因此可以顺序进行操作。对于每一个\(e......
  • json
    JSON,全称JavaScriptObjectNotation,是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言的文本格式来存储和表示数据。JSON的主要优点有:易于人类阅读和编写:JSON数据是以键值对的形式呈现的,结构清晰,易于理解。易于机器解析和......
  • 使用CMake启用RUNPATH特性
    使用CMake,启用RUNPATH特性,可以参考官方帖子。如下源码来自于上述帖子。CMAKE_MINIMUM_REQUIRED(VERSION2.8FATAL_ERROR)PROJECT(RUNPATHC)SET(CMAKE_VERBOSE_MAKEFILEON)SET(CMAKE_INSTALL_RPATH$ENV{HOME}/lib)FILE(WRITE${CMAKE_BINARY_DIR}/main.c"intmain(void)......
  • Postman 发送 Json 类型请求
    1.选择请求的方式选择为post请求,输入url。url地址为:http://localhost:8386/auth/query/shopIdToken。如下图所示:对应的post请求映射:@PostMapping("auth/query/shopIdToken")ShopIdTokenResponsequeryShopIdToken(@RequestBodyQueryShopIdTokenRequestrequest);2......
  • ASP.NET Core 6(.NET 6) Program.cs中使用读取appsettings.json配置文件
    ​ 在ASP.NETCore6(.NET6)中,可以使用Json格式的appsettings.json配置文件来配置应用程序,用于存储应用程序的配置信息,方便我们灵活的配置应用程序。本文主要介绍Program.cs中,使用读取appsettings.json配置文件的方法,以及相关的示例代码。1、通过配置实体类的方式1)配置实体......
  • 使用Commons JXPath简化XML/JSON处理
    第1章:引言咱们都知道,在现代软件开发中,处理XML和JSON数据几乎是家常便饭。这两种格式广泛应用于配置文件、数据交换、API响应等领域。不过,要手动解析和操作它们,有时候真是让人头大。当你面对一堆复杂的XML或JSON文件时,如果有一个工具能直接帮你找到想要的数据,那该多好。JXPath正......
  • 使用Commons JXPath简化XML/JSON处理
    第1章:引言咱们都知道,在现代软件开发中,处理XML和JSON数据几乎是家常便饭。这两种格式广泛应用于配置文件、数据交换、API响应等领域。不过,要手动解析和操作它们,有时候真是让人头大。当你面对一堆复杂的XML或JSON文件时,如果有一个工具能直接帮你找到想要的数据,那该多好。JXPath正......