Для этого вы можете использовать библиотеку Jayway JsonPath .Это позволяет найти пути для данного свойства.Когда вы найдете все пути, вы можете извлечь значения для них.JSON Schema
, который описывает JSON
, также является допустимым 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
См. Также:
- Jsonpath с Джексоном или Гсоном
- Json Path Maven