gpt4 book ai didi

java - 如何通过Key获取动态JSON值而不解析为Java对象?

转载 作者:行者123 更新时间:2023-11-30 05:23:44 25 4
gpt4 key购买 nike

我正在尝试获取带有动态键的 json(具有未知模板)值;

"user.specs.id"

问题是我的 json 结构不是静态的,因此我无法将其解析为 java 对象或使用 Gson 方法获取其属性。

{
"user": {
"specs": {
"id": 12222,
"name": "foo"
}
}
}

有没有办法使用某个键从任何 json 中提取一些数据?

编辑:我有一个类似的服务方法;

public Object getValueByKey(String json, String key);

“json”参数的可能值;

{"name": "test"}    //possible key "name"

{"user": {"id": 1232}} //possible key "user.id"

{"cars": ["car1", "car2"]} //possible key "cars[0]"

最佳答案

正如 @Michał Ziober 的评论,您可以通过使用 JsonPath 来简单地实现此目的,如下所示:

Maven 依赖

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

代码片段

public static void main(String[] args) {
getValueByKey("{\"name\": \"test\"}", "name");
getValueByKey("{\"user\": {\"id\": 1232}}", "user.id");
getValueByKey("{\"cars\": [\"car1\", \"car2\"]}", "cars[0]");
}

public static void getValueByKey(String json, String key) {
DocumentContext jsonContext = JsonPath.parse(json);
Object value = jsonContext.read(key);
System.out.println(value.toString());
}

控制台输出

11:38:50.840 [main] DEBUG c.j.j.internal.path.CompiledPath - Evaluating path: $['name']
test
11:38:50.855 [main] DEBUG c.j.j.internal.path.CompiledPath - Evaluating path: $['user']['id']
1232
11:38:50.855 [main] DEBUG c.j.j.internal.path.CompiledPath - Evaluating path: $['cars'][0]
car1

<小时/>

了解更多

关于java - 如何通过Key获取动态JSON值而不解析为Java对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59065992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com