【问题标题】:How to loop on a JSON data and put part of it in another array?如何循环 JSON 数据并将其部分放入另一个数组中?
【发布时间】:2021-06-05 01:27:48
【问题描述】:

我想循环一个 JSON 数据并将其中的一部分放在一个单独的数组中。

我有这个 JSON 数据:

{"msg":"[{"parent":"0","child":"1"},{"parent":"0","child":"2"}]","sig":"3045022100b3f03c83ed1f3d0bc72475550f23c0dd38277b0e2230e1fe76611577b2ca4b7e022037c77d37cc08ed897d0d1a11d09342e6abb73e641d20d5d55f367044d5489ddf"}

我只想像这样创建一个msg 数组:

[ '0', '1', '0', '2 ]

我的代码:

var message = '[{"msg":[{"parent":"0","child":"1"},{"parent":"0","child":"2"}],"sig":"3045022100b3f03c83ed1f3d0bc72475550f23c0dd38277b0e2230e1fe76611577b2ca4b7e022037c77d37cc08ed897d0d1a11d09342e6abb73e641d20d5d55f367044d5489ddf"}]'
var g = [];
const jsArray = JSON.parse(message);
Array.from(jsArray.msg).forEach(jsdata => {
  console.log(jsdata)
  g.push(jsdata.parent, jsdata.child)
})
console.log(g);

我无法满足我真正想要的内容:

[
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined, undefined, undefined,
  undefined, undefined, undefined, undefined,
  ... 10 more items
]

请问我该如何解决? 提前致谢

【问题讨论】:

  • msg 是否包含字符串值?如果是这样,您还需要JSON.parseArray.from(JSON.parse(jsArray.msg))
  • JSON 字符串不是有效的 JSON。 msg 中包含的数组不能被引用为合法的。
  • 如您所见,您的代码会产生语法错误,因为 JSON 格式错误。请编辑您的问题以提供 actual JSON 字符串。
  • @RandyCasburn 谢谢!你说得对。我已经编辑了代码。
  • 太好了——请看我的回答。

标签: javascript node.js arrays json loops


【解决方案1】:

就像使用.map 方法收集数据然后将最终数组展平以获得输出一样简单。

var message ='[{"msg":[{"parent":"0","child":"1"},{"parent":"0","child":"2"}],"sig":"3045022100b3f03c83ed1f3d0bc72475550f23c0dd38277b0e2230e1fe76611577b2ca4b7e022037c77d37cc08ed897d0d1a11d09342e6abb73e641d20d5d55f367044d5489ddf"}]';

let data = JSON.parse(message);
let output = data[0].msg.map(d=>[d.parent,d.child]).flat();
console.log(output);

【讨论】:

    【解决方案2】:

    尝试下面的代码循环内部数组:

        var message ='[{"msg":[{"parent":"0","child":"1"},{"parent":"0","child":"2"}],"sig":"3045022100b3f03c83ed1f3d0bc72475550f23c0dd38277b0e2230e1fe76611577b2ca4b7e022037c77d37cc08ed897d0d1a11d09342e6abb73e641d20d5d55f367044d5489ddf"}]';
        let g=[];
        const jsArray = JSON.parse(message);
        jsArray.forEach(jsMsgData => {
             // console.log(jsMsgData.msg);
             jsMsgData.msg.forEach(jsdata => {
                g.push(jsdata.parent, jsdata.child);
             })
        });
        console.log(g);

    在此处查看完整代码:https://ideone.com/QywYfb

    【讨论】:

    • 我假设他是从 api 调用中获取数据,所以 json 格式应该是正确的,否则他不会得到很多未定义的值推送到g
    • 感谢您的回答!完整代码的链接不起作用。你能检查一下链接吗?
    • 它为我工作我在隐身模式下检查,所以没有访问问题。也许你的防火墙阻止了它。
    • 我把它转换成代码 sn-p 现在试试@ismsm
    【解决方案3】:

    要将 JSON 作为 JS 使用,您必须使用 JSON.parse()。 这会将您的 JSON 对象传播到具有其属性的 Array 实例。 然后你可以遍历数组并做任何你喜欢的事情。 当您完成实例并希望将其传递给函数时,请使用 JSON.stringify() 将 Object 转换为字符串(您可以编写或传递)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 2022-01-16
      • 2012-03-04
      • 2020-02-23
      • 2016-04-19
      相关资源
      最近更新 更多