【问题标题】:convert nested array to JSON string in js?在js中将嵌套数组转换为JSON字符串?
【发布时间】:2018-04-21 18:06:29
【问题描述】:

我有一组这样的数组:[["Sarah"],["Jamie"],["B"],["148"]]

我想将其转换为 JSON 字符串,每个值都有特定的元素。例如,

{ "name":"Sarah", "grade":"148", "School":"B"...}

我应该如何进行?我尝试 toString 数组,然后与这个元素绑定,但效果不佳..

原始Json

   "Data":{
      "Table":[
         {
            "Name":[
               "Jamie"
            ],
            "School":[
               "A"
            ],
            "grade":[
               "99"
            ]

         },
         {
            "Name":[
               "Mike"
            ],
            "School":[
               "B"
            ],
            "grade":[
               "148"
            ]
         }
      ]
   }
}

【问题讨论】:

  • 我最初是从 Web 服务获取一个 JSON 对象。我必须进行一些解析,并获得每个名称的特定值,但现在我必须用名称返回它......这有意义吗?例如 {"Sarah": "1", "Jamie": "59", "Mike" : "3"..} 然后解析
  • 什么是角部分?如果没有,请删除标签
  • @Xufox - 在帖子中更新。谢谢。不确定 Ori Dori 的以下回答是否对我来说是最好的工作方式。我知道这会奏效,但有没有更好的方法来做到这一点?
  • 您真的需要将每个数字字符串嵌套在另一个数组中吗?只是 ["1", "2", "3", "4"] 会更简单。
  • 我不需要……但这就是我最后得到的……

标签: javascript arrays json string angular


【解决方案1】:

您可以使用reduce 来执行此操作!

let newData = data.Data.Table.reduce(function(arr, obj) {
    let newObj = {};
    for (let key in obj) {
        newObj[key] = obj[key][0]
    }

    arr.push(newObj);
    return arr;
}, [])

演示:https://jsfiddle.net/500eo2gp/

【讨论】:

  • 感谢您的建议,但我不希望将所有数组都检索到 JSON 字符串中。我只希望返回的值是每个名称的 JSON 字符串。现在,我只返回了 [["Sarah"],["Jamie"],["B"],["148"]],所以我只想要这个数组的 JSON 字符串以及它们的元素名称。就像这样 ["Name" : "Sarah", "Name" : "Jamie", "School":"B", "Grade" : "148"] 忽略休息
【解决方案2】:
let newDataArray = this.data.Data.Table.reduce(function(arr, obj) {
  let newObj = {};
  for (let key in obj) {
    newObj[key] = obj[key][0]
  }

  arr.push(newObj);
    return arr;
  }, []
);
newData =JSON.stringify(newDataArray);

tymeJV 的代码 sn-p 中的JSON.stringify(newDataArray) 数组将为您提供如下 JSON 字符串。

[{"Name":"Jamie","School":"A","grade":"99"},{"Name":"Mike","School":"B","grade":"148"}]

演示: http://plnkr.co/edit/wPhVTOFhRgERLXKCuoYl?p=preview

【讨论】:

    【解决方案3】:

    你可以试试简单的forEach

    var data =   {"Data": {"Table": [{"Name": ["Jamie"],"School": ["A"],"grade": ["99"]},{"Name": ["Mike"],"School": ["B"],"grade": ["148"]}]}};
    
    var items = [];
    data['Data']['Table'].forEach(function(item){
      items.push({name: item.Name[0], grade: item.grade[0], school: item.School[0]});
    });
    
    console.log(JSON.stringify(items));

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 2018-12-27
      • 2014-03-16
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多