2012-02-09 95 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或其他类似功能的库,则需要手动迭代阵列,如其他人所建议的