我正在尝试获取带有动态键的 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/