在Array对象下解析JSON

时间:2018-02-14 15:40:14

标签: javascript json

我有一个简单的JSON字符串,封装在使用JSONArray和Java中的JSONObject形式org.json创建的数组中。

var outObjA = [{"LoginTime":"2018-02-14 08:51:48.0","User":"f00dl3","RemoteIP":"127.0.0.1"}];

我试图用JavaScript解析它。首先,我使用“i”计数器迭代数组封装数据:

for(var i = 0; i < outObjA.length; i++) {
   var jsonData = JSON.parse(outObjA[i]);
   console.log(jsonData);
}

当我尝试解析JSON时,出现错误:

  

SyntaxError:JSON.parse:JSON数据第1行第2列的意外字符

我在其中构建了一个try / catch,它返回一个对象:

for (var i = 0; i < outObjA.length; i++) {
  var jsonData = null;
  try {
    jsonData = JSON.parse(outObjA[i]);
  } catch (e) {
    jsonData = outObjA[i];
  }
  console.log(jsonData);
}

返回:

{
  "LoginTime": "2018-02-14 08:51:48.0",
  "User": "f00dl3",
  "RemoteIP": "127.0.0.1"
}

这是有效的JSON,不是吗?

3 个答案:

答案 0 :(得分:3)

这不是JSON字符串,而是JavaScript数组。要使它成为JSON字符串,用撇号包围它,然后你可以解析它,最后循环它:

var outObjA = '[{"LoginTime":"2018-02-14 08:51:48.0","User":"f00dl3","RemoteIP":"127.0.0.1"}]';

var outObjA = JSON.parse(outObjA);
for (var i = 0; i < outObjA.length; i++) {
  var jsonData = outObjA[i];
  console.log(jsonData);
}

或者更好的是,您可以直接遍历它而无需解析:

var outObjA = [{"LoginTime": "2018-02-14 08:51:48.0", "User": "f00dl3", "RemoteIP": "127.0.0.1"}];

for (var i = 0; i < outObjA.length; i++) {
  var jsonData = outObjA[i];
  console.log(jsonData);
}

答案 1 :(得分:0)

此行不是必需的。

 for(var i = 0; i < outObjA.length; i++) {
    var jsonData = JSON.parse(outObjA[i]);
    console.log(jsonData);
}

因为outObjA是一个不是json的数组类型,所以它不需要解析只是检索它并显示它。

  

JSON.parse()方法解析JSON字符串,构造字符串描述的JavaScript值或对象。可以提供可选的reviver函数,以便在返回结果对象source之前对结果对象执行转换。

要进一步扩展,请从Mozilla中获取此示例,

var json = '{"result":true, "count":42}';

这需要解析的原因是因为它是一个字符串类型,JSON.parse将该字符串转换为JSON对象,从而使其可访问。像这样,

obj = JSON.parse(json);

console.log(obj.count);
// expected output: 42

console.log(obj.result);
// expected output: tru

您的代码唯一可行的方法就是执行此操作。

var outObjA = ['{"LoginTime":"2018-02-14 08:51:48.0","User":"f00dl3","RemoteIP":"127.0.0.1"}']; 

这样,位置零处的元素是一个字符串,而不是JSON对象。

总而言之,字符串不是JSON。

  1. JSON对象被大括号{}包围。
  2. JSON对象以键/值对编写。
  3. 键必须是字符串,值必须是有效的JSON数据类型 (字符串,数字,对象,数组,布尔值或空)。
  4. 键和值用冒号分隔。
  5. 每个键/值对用逗号分隔。

答案 2 :(得分:0)

你不需要解析它已经是json

您可以使用

var jsonData = outObjA[i];
console.log(jsonData['User']); // or any other key