gpt4 book ai didi

java - 如何根据属性值过滤json元素

转载 作者:行者123 更新时间:2023-12-02 10:15:51 25 4
gpt4 key购买 nike

我有一个 json 模式,其中包含许多具有“image”属性的元素。

  "passportPhoto": {
"description": "Passport photo",
"type": "string",
"image": {
"binaryEncoding": "base64"
}
},

实际的 json 如下所示

  "passportPhoto": "photo in base 64 encoded string format",

是否可以根据属性“image”过滤模式并获取 jsonpath 格式的所有元素的列表

$.a.b.c.passportPhoto

我必须使用 json 路径读取 json,然后对照片执行一些操作,例如序列化它。 但我的问题是如何在Java系统中基于“图像”属性过滤模式

最佳答案

为此,您可以使用 Jayway JsonPath图书馆。它允许查找给定属性的路径。当您找到所有路径时,您可以为它们提取值。描述 JSONJSON Schema 也是一个有效的 JSON,因此首先,您可以从 JSON Schema 中提取所有属性,然后在给定 JSON 有效负载的过程之后。在下面的示例中,我使用预定义的属性列表。

对于给定的 JSON 负载(假设所有 *photo 属性在架构中描述为图像):

{
"map": {
"photo": "map photo"
},
"person": {
"data": {
"photos": {
"photo": "photo Base64",
"passportPhoto": "passport photo Base64"
}
}
}
}

下面的例子:

import com.jayway.jsonpath.EvaluationListener;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.ReadContext;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class JsonPathApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();

List<String> paths = new ArrayList<>();
ReadContext findPathsContext = JsonPath.parse(jsonFile).withListeners((found) -> {
paths.add(found.path());
return EvaluationListener.EvaluationContinuation.CONTINUE;
});

List<String> properties = Arrays.asList("photo", "passportPhoto");
properties.forEach(p -> findPathsContext.read("$.." + p));

ReadContext readContext = JsonPath.parse(jsonFile);

for (String path : paths) {
System.out.println("Path: " + path);
System.out.println("Value: " + readContext.read(path));
}
}
}

打印:

Path: $['map']['photo']
Value: map photo
Path: $['person']['data']['photos']['photo']
Value: photo Base64
Path: $['person']['data']['photos']['passportPhoto']
Value: passport photo Base64

另请参阅:

  1. Jsonpath with Jackson or Gson
  2. Json Path Maven

关于java - 如何根据属性值过滤json元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54688656/

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