2012-09-29 44 views
2

在jsonPath我試圖過濾具有多個值的對象。一個可能的值是一個電子郵件地址。由於@被用作指向當前對象的指針,因此它失敗了。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": "[email protected]", 
      "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==='[email protected]')] 

任何人都知道一種方法來逃避@符號或不同的方法來蒸發對象?

回答

0

您可以使用DefiantJS並在JSON結構上編寫XPath。嘗試一下lib和測試的XPath在你的JSON在這裏:
http://defiantjs.com/#xpath-evaluator

我在你的JSON數據粘貼並測試這個XPath和它的工作原理:

//Author[value="[email protected]"] 

DefiantJS擴展全局對象JSON用新方法; 「搜索」 - 返回一個數組,並在JavaScript中,它看起來像這樣:

var author = JSON.search(json_data, "//Author[value="[email protected]"]"); 

console.log(author[0].value); 
// [email protected] 

console.log(author[0].count); 
// 58 
相關問題