2

在 jsonPath 我试图过滤具有多个值的对象。一个可能的值是电子邮件地址。由于 @ 用作指向当前对象的指针,因此它失败了。

示例 json 字符串

{
"report": {
    "Author": [
        {
            "value": "John",
            "count": "58",
            "fields": [
                {
                    "key": "FileSize",
                    "value": "12314"

                },
                {
                    "key": "Date",
                    "value": "2000-01-01"
                }
            ]
        },
        {
            "value": "Jane",
            "count": "1",
            "fields": [
            ]
        },
        {
            "value": "Foo@bar.com",
            "count": "58",
            "fields": [
                {
                    "key": "FileSize",
                    "value": "12314"

                },
                {
                    "key": "Date",
                    "value": "2000-01-01"
                },
                {
                    "key": "tags",
                    "value": "a,b,c,d"
                }         
            ]
        },
        {
            "value": "Bill",
            "count": "2",
            "fields": [
                {
                    "key": "FileSize",
                    "value": "14"

                }
            ]
        }
    ]
}
}

如果你使用

$.report.Author[?(@.value==='John')] 

结果是

"[{"value":"John","count":"58","fields":[{"key":"FileSize","value":"12314"},{"key":"Date","value":"2000-01-01"}]}]"

但由于电子邮件地址有一个 @ 符号 jsonPath 返回 false

$.report.Author[?(@.value==='Foo@bar.com')]

任何人都知道逃避@符号的方法或评估对象的不同方法吗?

4

2 回答 2

1

这对我有用:

$.report.Author[?(@.value==='Foo\\u0040bar.com')]

我使用带有这个jsonpath 库的nodejs对其进行了测试。

于 2013-04-28T11:59:22.603 回答
0

您可以使用 DefiantJS 并在 JSON 结构上编写 XPath。在您的 JSON 上试用 lib 并测试 XPath:http:
//defiantjs.com/#xpath-evaluator

我已经粘贴了你的 json 数据并测试了这个 XPath,它可以工作:

//Author[value="Foo@bar.com"]

DefiantJS 用新方法扩展了全局对象 JSON;“搜索” - 它返回一个数组,在 javascript 中,它看起来像这样:

var author = JSON.search(json_data, "//Author[value="Foo@bar.com"]");

console.log( author[0].value );
// Foo@bar.com

console.log( author[0].count );
// 58
于 2014-01-04T13:18:55.103 回答