我有一个字符串:items[0].name
我要应用于JSON对象:{"items":[{"name":"test"}]}
,它包含在变量test
中。我想将该字符串应用于该对象以进行搜索(test.items[0].name
)。我只能想到一种方法:使用我自己的函数解析方括号和点。还有其他方法可以做到这一点吗?也许使用eval? (尽管我很乐意避免这种情况......)
为清楚起见:
我有一个JSON对象,里面的内容真的无关紧要。我需要能够像这样查询对象:theobject.items[0]
,这显然是JSON对象的正常行为。问题是,查询字符串(即items[0]
)是未知的 - 如果您愿意,可以将其称为用户输入 - 它实际上是一个字符串(var thisIsAString = "items[0]"
)。所以,我需要一种方法将查询字符串附加到theobject
,以便它返回theobject.items[0]
答案 0 :(得分:8)
function locate(obj, path) {
path = path.split('.');
var arrayPattern = /(.+)\[(\d+)\]/;
for (var i = 0; i < path.length; i++) {
var match = arrayPattern.exec(path[i]);
if (match) {
obj = obj[match[1]][parseInt(match[2])];
} else {
obj = obj[path[i]];
}
}
return obj;
}
var name = locate(test, 'items[0].name');
答案 1 :(得分:1)
... JSON没有对象,它只是一个字符串。 如果您正在处理一个对象(即:您可以使用点/括号表示法引用它),那么它只是一个JavaScript对象/数组......
因此,根据交易的内容,如果您正在处理100%的字符串:
'{"name":"string","array":[0,1,2]}'
然后您需要通过JSON.parse
;
var json_string = '{"name":"string","array":[0,1,2]}',
js_obj = JSON.parse(json_string);
js_obj.name; // "string"
js_obj.array; // [0,1,2]
js_obj.array[1]; // 1
如果它不是一个字符串,并且确实是一个对象/数组,其中包含其他对象/数组,那么你只需要去:
myObj.items[0].name = items[0].name;
如果它是一个字符串,那么.parse
它,并使用解析的对象完成我刚刚做的。
如果需要再次成为字符串,要发送到服务器,请使用JSON.stringify
,如:
var json_string = JSON.stringify(js_obj);
现在你已经修改了JSON字符串了。
如果您需要支持GhettoIE(IE&lt; 8),请从道格拉斯克罗克福德下载json2.js
,如果找不到window.JSON
,则有条件地在页面上添加该脚本。