代码之家  ›  专栏  ›  技术社区  ›  Dan Beam

jsonpath:包含筛选器

  •  7
  • Dan Beam  · 技术社区  · 14 年前

    大家好,我想知道是否有人知道使用正则表达式或通配符运算符(或pehaps)的方法 '%LIKE%' 在SQL中),所以我可以使用jsonpath在一大组json数据中进行搜索。

    例如(是的,我正在分析,而不是 eval( ) 在应用程序中输入我的数据):

    var obj = eval ( '({ "hey": "can you find me?" })' );
    

    我希望能够像这样浏览数据:

    $.[?(@.hey:contains(find))] // (in jQuery terminology)
    

    其中参数的内容是 { "key" : "value" } 在我的数据中配对。

    目前我只找到了 > ,请 < , = != 关系运算符,这并不能给我很大的灵活性。

    有人知道我能做什么吗? 只是 找到这个数据的jsonpath(不需要遍历所有条目)?

    我不想使用Dojo的jsonQuery,因为这需要另一个库。但是,它允许您这样做,这里是它们的示例:

    [?description~‘*the*’]
    

    问我你想不想对这个问题作更多的澄清。

    3 回复  |  直到 14 年前
        1
  •  13
  •   Dan Beam    14 年前

    不过,伙计们,无论如何,只要在jsonpath内部使用ecma就可以了,尽管这不是本地选择器/操作符。简单使用:

    $.[?(/find/.test(@.hey))]
    

    regexp测试()方法(哪个jsonpath eval 在幕后)。

    如果有人有更好的答案,尽管告诉我。

        2
  •  2
  •   Badtestor    6 年前

    另外,可能对某人有用。 Link to JSONPath Notation

    它对我有效(jmeter 4.0)

    =~

    匹配javascript正则表达式。例如,[?(@.description=~/cat.*/i))匹配描述以cat开头的项(不区分大小写)。

        3
  •  1
  •   Akshay Shinde    7 年前

    如果有人想要Java中的包含解决方案,那么这就和JsonPath一起工作。

    Filter<?> filter = Filter.filter(Criteria.where("hey").regex(Pattern.compile(".*find.*")));
    System.out.println(JsonPath.read(json, "$..[?]", filter));
    

    进口

    import com.jayway.jsonpath.Criteria;
    import com.jayway.jsonpath.Filter;
    import com.jayway.jsonpath.JsonPath;