如何使用 FasterXML 获取出现 JSON 字段的所有位置的完整路径?
How do I get the full path of everywhere a JSON field occurs using FasterXML?
给定一个 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
FasterXML 库中是否有一部分无需解析 JSON 的所有值即可公开此信息?我以前使用递归来这样做,从根 top_field 开始向下走,在我走的时候向下传递每个对象,但这很容易在大的 JSON 对象上发生堆栈溢出。
这条主线:
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。
给定一个 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
FasterXML 库中是否有一部分无需解析 JSON 的所有值即可公开此信息?我以前使用递归来这样做,从根 top_field 开始向下走,在我走的时候向下传递每个对象,但这很容易在大的 JSON 对象上发生堆栈溢出。
这条主线:
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。