给定一个JSON字段名,如"my_field"和一个FasterXML JSON ObjectNode,我怎么能通过JSON并得到"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
是否有一部分fastxml库可以在不解析JSON的所有值的情况下公开这些信息?我以前使用递归来做到这一点,从根top_field开始向下走,随着我的前进传递每个对象,但这很容易导致大型JSON对象的堆栈溢出。
This main:
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使用了Jackson