2

jsonPath では、いくつかの値でオブジェクトをフィルタリングしようとしています。考えられる値の 1 つは、電子メール アドレスです。@ は現在のオブジェクトへのポインタとして使用されているため、失敗しています。

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')]

@ 記号をエスケープする方法またはオブジェクトを評価するためのdiffernetメソッドを知っている人はいますか?

4

2 に答える 2

1

これは私のために働く:

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

このjsonpath ライブラリでnodejsを使用してテストしました。

于 2013-04-28T11:59:22.603 に答える
0

DefiantJS を使用して、JSON 構造に XPath を記述できます。lib を試して、JSON で 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 に答える