2012-03-06 290 views
2

這可能是一個noob問題,但我想知道是否有一種方法可以選擇json對象而不必循環鍵值對。我用e4x做了類似的事情,但我不確定如何爲js在語法上做到這一點。例如根據鍵值對選擇json對象

var data = { "objects":[ 
       {"foo":"x","bar":"a"}, 
       {"foo":"y","bar":"b"} 
       ]} 

所以不是一個for循環,一些方法來聲明

var someObject = data.objects[where objects.foo == x] 
+0

這不是JSON,這是反對的文字符號。 – 2012-03-06 19:32:09

+0

你錯了。 JSON是對象文字符號的一個子集,事實上要求值對中的標識符只是字符串。 – FlavorScape 2012-03-06 20:22:04

回答

3

你可以做到這一點W/O 手動疊代的數據,但有些代碼應該遍歷無論如何對象(所以不期望在相當大的物體上閃電般的速度)。

有一個庫爲:jsonpath

+0

呃。我不喜歡圖書館。沒有純粹的方式,呃?猜猜我正在循環。 – FlavorScape 2012-03-07 16:27:44

+0

然後自己寫。沒什麼特別的。啊,你可以從這裏找到'findBy':http://travian.kirilloid.ru/js/array.js – kirilloid 2012-03-07 18:58:54

+0

看到jsonQ! https://github.com/s-yadav/jsonQ/ – FlavorScape 2015-02-25 21:32:26

0

這個問題在兩年前有人問jsonQ之前。 jsonQ允許我們編寫代碼來查找兄弟,遍歷樹等,而無需在循環內編寫一堆循環。雖然這個問題想要一種方式來找到它在本地JS,我認爲我2歲的問題現在有點天真。我真的在尋找像jsonQ這樣的庫來避免編寫一堆醜陋的循環(雖然我可以自己完成這項工作)。

0

問題是舊的,但可能這個答案可以幫助某人。

要選擇列表中的項目,您可以使用JavaScript 過濾功能:

var data = { "objects":[ 
        {"foo":"x","bar":"a"}, 
        {"foo":"y","bar":"b"} 
       ]} 

var someobject = filterObject('x'); 

function filterObject(fooValue) { 
    return data.objects.filter(function(item) { 
     return item.foo == fooValue; 
    } 
}