我有一个简单的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,不是吗?
答案 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。
答案 2 :(得分:0)
你不需要解析它已经是json
您可以使用
var jsonData = outObjA[i];
console.log(jsonData['User']); // or any other key