Javascript:如何将JSON点字符串转换为对象引用

时间:2012-11-13 03:41:59

标签: javascript json

我有一个字符串: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]

的值

2 个答案:

答案 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,则有条件地在页面上添加该脚本。