2012-02-09 179 views
0

我有像這樣的填充JSON/JS數據:檢索JSON對象?

var settingDefs = []; 
    settingDefs.push({ 
    name:'responses', label:'Responses', type:'aeditor', 
    defaultValue: Object.toJSON([ 
     {"id":"1", "name":"Bob", "text":"Is here"}, 
     {"id":"2", "name":"James", "text":"Online"}, 
    ]) 
    }); 

我將如何檢索條目說,如果我有「1」,我想用「1」來檢索名稱/文本查找該條目(條目1)?

+1

爲什麼使用Object.toJSON? – 2012-02-09 19:47:21

+0

嗯,我是http://community.spiceworks.com/plugin/9 – Zeno 2012-02-09 20:06:02

回答

1

假設每個defaultValue屬性都是一個Array而不是JSON字符串 - 您應該遍歷settingDefs數組並返回defaultValue屬性的所有(或者可能只是第一個?)條目,其id與您擁有的屬性相匹配。類似這樣的:

function lookupValueById(sds, id) { 
    for (var i=0; i<sds.length; i++) { 
    for (var j=0; j<sds[i].defaultValue.length; j++) { 
     var el = sds[i].defaultValue[j]; 
     if (el.id == id) return el; 
    } 
    } 
    return null; 
} 
lookupValueById(settingDefs, 1); // => {id:'1', name:'Bob', text:'Is Here'} 
+0

上的一些代碼應該可能使用'==='並傳遞正確的密鑰,因爲可能有''1「'和'1」 IDS。同樣'0'會匹配'「0」,「False」或「」「'。 – Hamish 2012-02-09 20:06:58

1

從你的問題中不清楚that entry指的是什麼。

如果JSON 解串物體看起來是這樣的:

var foo = [ 
    {"id":"1", "name":"Bob", "text":"Is here"}, 
    {"id":"2", "name":"James", "text":"Online"}, 
] 

然後,你必須每個對象有一個屬性id一個字符串值(即恰好是一個數字)對象的數組。

因此,你需要迭代這個數組並測試id屬性的值:

var findObjById = function(arr, idToFind) { 
    for(i = 0; i < arr.length; i++) { 
     if(arr[i].id === idToFind) return arr[i]; 
    } 
} 
var obj = findObjById(foo, "1"); 
+0

對不起,在第一個條目(id 1)中的「該條目」。 – Zeno 2012-02-09 19:54:17

0

不知道爲什麼你需要Object.toJSON這裏。我會做這樣的事情:

var settingDefs = []; 
    settingDefs.push({ 
    name:'responses', label:'Responses', type:'aeditor', 
    defaultValue: [ 
     {"id":"1", "name":"Bob", "text":"Is here"}, 
     {"id":"2", "name":"James", "text":"Online"}, 
    ] 
    }); 

var valueWithId1 = $.grep(settingDefs[0].defaultValue, function(el){return el.id === "1";})[0] 

我在這裏使用jQuery.grep。如果您不使用jQuery或其他類似功能的庫,則需要手動迭代陣列,如其他人所建議的