给定一个JSON字段名称,例如" my_field"和一个FasterXML JSON ObjectNode,我如何通过JSON并获得所有“#34; my_field"发生在JSON?
"top_field": {
"mid_field": [
{
"my_field": true,
},
{
"my_field": true,
}
],
"another_mid_field": [
{
"my_field": false
}
]
}
我希望得到以下结果:
top_field.mid_field[0].my_field
top_field.mid_field[1].my_field
top_field.another_mid_field.my_field
FasterXML库中是否有一部分公开此信息而不必解析JSON的所有值?我之前使用递归来执行此操作,从根top_field开始并向下走,在我走的时候将每个对象传递下来,但是在大型JSON对象上容易出现堆栈溢出。
答案 0 :(得分:1)
这个主要:
package jsonpath;
import java.util.List;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.Option;
import static com.jayway.jsonpath.JsonPath.*;
public class GetPaths {
public static void main(String [] args) {
String json = "{\"top_field\": { \"mid_field\": [ { \"my_field\": true, }, { \"my_field\": true, } ], \"another_mid_field\": [ { \"my_field\": false } ] }}";
Configuration conf = Configuration.builder().options(Option.AS_PATH_LIST).build();
List<String> pathList = using(conf).parse(json).read("$..my_field");
for(String path : pathList) {
System.out.println(path);
}
}
}
将完全输出
$['top_field']['mid_field'][0]['my_field']
$['top_field']['mid_field'][1]['my_field']
$['top_field']['another_mid_field'][0]['my_field']
如果你在那个上做一些简单的字符串替换,我认为这是一个很好的简单解决方案。我不确定你是否可以获得与普通Jackson / FasterXML类似的东西。 JsonPath在引擎盖下使用了杰克逊。