2015-07-10 105 views
0

我正在使用JSON Path parser解析某些數據。這裏是源數據的一個例子:使用第一個對象的值在第二個對象中查找對應的值

{ 
"people": [ 
    { 
     "initials": "RF", 
     "sport": "T" 
    }, 
    { 
     "initials": "LM", 
     "sport": "F" 
    } 
], 
"definitions": { 
    "RF": { 
     "def_1": "Roger Federer", 
     "def_2": "Roger" 
    }, 
    "LM": { 
     "def_1": "Lionel Messi", 
     "def_2": "Lionel" 
    }, 
    "T": { 
     "def_1": "Tennis" 
    }, 
    "F": { 
     "def_1": "Football" 
    } 
} 
} 

現在,如果我只使用數組(people),這幾乎是無用的,RFT沒有多大的意義。但是,在對象(definitions)中定義了它們。 RF意味着Roger FedererTTennis,所以我需要導入這兩個。我可以輕鬆導入RFT,但我正在努力尋找連接RFTRoger FedererTennis的查詢。

首先,我需要指定上下文(根),然後指定對象的名稱。下面是一個例子:

Context: $.[] 
Query: initials 
Result is: RF 

當我導入所有的這在一個節點,本實施例能很好地導入陣列(people)數據。

這是我能成功,現在導入:

Field1 value: RF 
Field2 value: T 

我需要什麼:

Field1 value: RF 
Field2 value: T 
**Field4 value: Roger Federer** 
**Field5 value: Tennis** 

基本上,我想更好地描述我從people陣列獲得。這是我嘗試過的組合之一,但它不起作用:

Context: $.[] 
Query: initials.def_1 
Query: people.initials.def_1 

有沒有辦法實現這一點?

回答

1

對於這樣一個簡單的數據結構,XPath聽起來像是過度殺毒。也許還有其他原因需要使用XPath,但在純JavaScript中這非常簡單。例如:

var data = { 
    "people": [ 
     { 
      "initials": "RF", 
      "sport": "T" 
     }, { 
      "initials": "LM", 
      "sport": "F" 
     } 
    ], 
    "definitions": { 
     "RF": { 
      "def_1": "Roger Federer", 
      "def_2": "Roger" 
     }, 
     "LM": { 
      "def_1": "Lionel Messi", 
      "def_2": "Lionel" 
     }, 
     "T": { 
      "def_1": "Tennis" 
     }, 
     "F": { 
      "def_1": "Football" 
     } 
    } 
}; 

data.people.forEach(function(person) { 
    var name = data.definitions[person.initials].def_1; 
    var sport = data.definitions[person.sport].def_1; 
    console.log(name, 'plays', sport); 
}); 

日誌:

Roger Federer plays Tennis 
Lionel Messi plays Football 
+0

啊,羅傑說。我在你的問題中添加了一個xpath標籤來幫助XPath專家發現它。 –

+0

謝謝你的回答。我使用的是XPath,因爲我使用的CMS(Drupal)有一個很好的模塊,它利用XPath並定期分析特定URL中的數據。由於它使得整個集成比自定義解決方案更容易,所以如果有可能,我寧願使用XPath。 – take2

相關問題