【问题标题】:Parsing JSON under Array object在 Array 对象下解析 JSON
【发布时间】:2018-02-15 00:03:04
【问题描述】:

我有一个简单的 JSON 字符串,封装在一个数组中,该数组使用 Java 中的 JSONArray 和 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,不是吗?

【问题讨论】:

  • 那不是 json... 那是 javascript 对象,你无法解析 JavaScript 对象,删除 JSON.parse(
  • outObjA 已经是一个不需要解析的对象了!如果它是一个字符串,你必须这样做。
  • 这是一个用 JavaScript Object Notation 编写的对象,但由于它已经在 J​​avascript 中,因此不需要解析。
  • @Occam'sRazor JSON 不能是一个对象,所以说 它是一个写成的对象 .... 令人困惑。 JSON 是一个字符串(我想它是一个对象......),它代表一个对象

标签: javascript json


【解决方案1】:

这不是 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);
}

【讨论】:

    【解决方案2】:

    这行不是必须的。

     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"}']; 
    

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

    总之,字符串不是 JSON。

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

    【讨论】:

    • 所以把字符串解析成 JSON 格式,其他方式不行
    【解决方案3】:

    你不需要解析,因为它已经是 json

    你可以改用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多