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



给定一个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

相关内容

  • 没有找到相关文章

最新更新