【问题标题】:iterate over formatted JSON Array [closed]遍历格式化的 JSON 数组 [关闭]
【发布时间】:2018-01-31 18:21:23
【问题描述】:

我正在查询一个 MS SQL 数据库,它返回一个格式化的 JSON 数组。以下是返回内容的示例。我已经使用了几乎所有可以找到的 JavaScript 示例来遍历数组,但没有任何效果:

[
  [
    {"id":1,"Title":"Friday"},
    {"id":2,"Title":"Saturday"},
    {"id":3,"Title":"Sunday"}
  ]
]

【问题讨论】:

  • 请展示您尝试过的每个示例?
  • 这是一个无效的 JSON 输入
  • @GillesQuenot OP 说它是输出,所以可以安全地假设缺少的报价是一个错字?但很好的收获
  • @Hans - John 的问题可能是由于缺少引号而导致的无效 json,它可能是数组数组,它​​可能忘记解析它,因为 sql 返回将是一个字符串.更正问题中的 json 会改变问题。
  • 以下是从 SQL 数据库返回的格式化 JSON 数组的打印输出:[ [ {"id":1,"Title":"Friday"}, {"id" :2,"Title":"Saturday"}, {"id":3,"Title":"Sunday"} ] ] 我需要访问数据,但返回的数据有额外的括号。我需要帮助对此进行迭代以提取信息

标签: javascript sql


【解决方案1】:

你的 json 数组有两个问题需要先解决

  1. 周日您缺少"
  2. 您有一个数组数组,而不仅仅是一个数组。

当您的数组正确时,您的 SQL 的返回应该如下所示:

'[{"id":1,"Title":"Friday"},{"id":2,"Title":"Saturday"},{"id":3,"Title":"Sunday"}]'

这还不是 json 对象,它只是一个看起来像一个的字符串,要将其用作 json 对象/数组,您需要像这样解析它:

var jsonArray = JSON.parse('[{"id":1,"Title":"Friday"},{"id":2,"Title":"Saturday"},{"id":3,"Title":"Sunday"}]');

如果无法绕过数组中的[[]] 数组,可以这样处理:

var jsonOuterArray = JSON.parse('[[{"id":1,"Title":"Friday"},{"id":2,"Title":"Saturday"},{"id":3,"Title":"Sunday"}]]');
var jsonArray = jsonOuterArray[0];

在 javascript 中有很多方法可以迭代它,这完全取决于你使用什么库以及你想从中得到什么,比如 jQuery 示例如何不仅给出对象,而且给出数组中的位置该对象,但 forEach 不会。

对于每个示例,jsonArray 将是从您的 SQL 中解析出来的 json,key 将是数组中的位置,value 将是数组中的对象。

JavaScript: (数组原型 forEach)

jsonArray.forEach(function(value){
    console.log(value.id, value.Title)
});

JavaScript:(for循环)

for (var key = 0; key < jsonArray.length; key++) {
    var value = jsonArray[key];
    console.log(value.id, value.Title)
};

jQuery:

$.each(jsonArray, function (key, value){
    console.log(value.id, value.Title)
});

【讨论】:

    【解决方案2】:

    使用 nodejs(ES5 语法):

    > [[{"id":1,"Title":"Friday"},{"id":2,"Title":"Saturday"}, {"id":3,"Title":"Sunday"}]][0]
    .forEach(function(elt){ console.log(elt.id, elt.Title)})
    1 'Friday'
    2 'Saturday'
    3 'Sunday'
    

    【讨论】:

    • forEach 不需要节点,它是数组原型的一部分。
    • 是的,当然,但我只是澄清一下我使用的是 nodejs ......不明白反对票
    • 不是我的,你的代码可以工作。
    【解决方案3】:

    请注意,星期日之前缺少报价:

    [[{"id":1,"Title":"Friday"},{"id":2,"Title":"Saturday"},    {"id":3,"Title":Sunday"}]]
    

    因此您将无法评估此 JSON。假设 JSON 被更正为

    [[{"id":1,"Title":"Friday"},{"id":2,"Title":"Saturday"},    {"id":3,"Title":"Sunday"}]]
    

    您将能够以常规方式对其进行迭代,例如使用for 循环。

    【讨论】:

      猜你喜欢
      • 2019-04-14
      • 1970-01-01
      • 2020-12-11
      • 2013-07-03
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 2011-02-05
      相关资源
      最近更新 更多