Java 如何使用FasterXML获取JSON字段出现的所有位置的完整路径?

Java 如何使用FasterXML获取JSON字段出现的所有位置的完整路径?,java,json,fasterxml,Java,Json,Fasterxml,给定一个JSON字段名,如“my_field”和一个FasterXML JSON ObjectNode,如何遍历JSON并获得JSON中出现“my_field”的所有位置的完全限定路径 "top_field": { "mid_field": [ { "my_field": true, }, { "my_field": true,

给定一个JSON字段名,如“my_field”和一个FasterXML JSON ObjectNode,如何遍历JSON并获得JSON中出现“my_field”的所有位置的完全限定路径

"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_字段开始向下遍历,在遍历时向下传递每个对象,但这很容易在大型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);
        }
    }
}

如果你做一些简单的字符串替换,我认为这是一个很好的简单的解决方案。我不确定你是否能用普通的Jackson/FasterXML得到类似的东西。JsonPath在引擎盖下使用Jackson。

谢谢,这太棒了!我们确实使用了JsonPath,但不幸的是,我仍然使用0.9,所以我无法使用它…我想这行“List pathList=using(conf).parse(json.read($…my_字段”)”应该是“List pathList=JsonPath.using(conf).parse(json.read($…my_字段”);”如果您不静态导入,可以。
$['top_field']['mid_field'][0]['my_field']
$['top_field']['mid_field'][1]['my_field']
$['top_field']['another_mid_field'][0]['my_field']