2

我有一个字符串:items[0].name我想应用于一个 JSON 对象:{"items":[{"name":"test"}]}它包含在变量test. 我想将该字符串应用于对象以便搜索它(test.items[0].name)。我只能想到一种方法:使用我自己的函数解析方括号和点。还有其他方法可以做到这一点吗?也许使用评估?(即使我很想避免这种情况......)

为了清楚起见:我有一个 JSON 对象,它里面的内容真的无关紧要。我需要能够像这样查询对象:theobject.items[0],这显然是 JSON 对象的正常行为。问题是,查询字符串(即。items[0])是未知的——如果你愿意,可以称之为用户输入——它实际上是一个字符串(var thisIsAString = "items[0]")。所以,我需要一种方法来附加该查询字符串theobject,以便它返回值theobject.items[0]

4

2 回答 2

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');
于 2012-11-13T03:54:57.807 回答
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 < 8),请json2.js从 Douglas Crockford 下载,如果找不到window.JSON.

于 2012-11-13T03:50:44.960 回答