【问题标题】:How to convert JSON to Array in Javascript如何在 Javascript 中将 JSON 转换为数组
【发布时间】:2017-08-29 04:32:18
【问题描述】:

我想将 JSON 转换为数组,并通过以下方式返回值: console.log(data);

值为:

[{ "data" : [  [object]  ] },
[{ "data" : [  [object] , [object]  ] }

所以,我通过以下方式转换为 JSON:

console.log(JSON.stringify(data, null, "    "));

值为:

[
  {
    "data" : [
          {
            "month" : 1,
             "name" : "Alex",
             "sum" : 20
          }
      ]  
  },
  {
    "data" : [
          {
            "month" : 2,
             "name" : "Zara",
             "sum" : 18
          },
          {
            "month" : 2,
            "name" : "Zara",
            "sum" : 19
          }
      ]  
  }

]

我想转换为 Array :

{
  "data" : { [ 1, "Alex", 20 ]  }
},
{
  "data" : { [ 2, "Zara", 18 ]  },
           { [ 2, "Zara", 19 ]  }
}

如何转换?

【问题讨论】:

标签: javascript jquery arrays json


【解决方案1】:

您可以简单地尝试以下:

var arr = Object.keys(obj).map(function(k) { return obj[k] });

【讨论】:

    【解决方案2】:

    您的预期输出的语法不正确,因为您不能拥有没有键值对的对象。

    你的输出可以是

    {
      "data" : [ [ 1, "Alex", 20 ]  ]
    },
    {
      "data" : [[ 2, "Zara", 18 ]  ,
               [ 2, "Zara", 19 ]  ]
    }
    

    这是考虑到上述输出的解决方案

    var inputArr = [
      {
        "data" : [
              {
                "month" : 1,
                 "name" : "Alex",
                 "sum" : 20
              }
          ]  
      },
      {
        "data" : [
              {
                "month" : 2,
                 "name" : "Zara",
                 "sum" : 18
              },
              {
                "month" : 2,
                "name" : "Zara",
                "sum" : 19
              }
          ]  
      }
    ];
    
    inputArr.forEach(function(item){
        for (var i=0; i< item.data.length; i++){
            var myArr = [];
            myArr.push(item.data[i].month);
            myArr.push(item.data[i].name);
            myArr.push(item.data[i].sum);
            item.data[i] = myArr;
        }
    })
    
    console.log(JSON.stringify(inputArr));

    注意:如果您可以在代码中使用 ES6,则可以简化解决方案。

    【讨论】:

      【解决方案3】:

      这里有一个解决方案(jQueryhttps://jsfiddle.net/mhhqj1nc/

      var data = [
        {
          "data" : [
                {
                  "month" : 1,
                   "name" : "Alex",
                   "sum" : 20
                }
            ]  
        },
        {
          "data" : [
                {
                  "month" : 2,
                   "name" : "Zara",
                   "sum" : 18
                },
                {
                  "month" : 2,
                  "name" : "Zara",
                  "sum" : 19
                }
            ]  
        }];
      
      var newdata = [];
      
      $.each(data, function(i, v){
        newdata.push({data: []});
        var temp = [];
        $.each(v.data, function(k, val){
          var keys = Object.keys(v.data[k]);
          $.each(keys, function(j){
            temp.push(v.data[k][keys[j]]);
          });
          newdata[i].data.push(temp);
          temp = [];
        });
      });
      console.log(JSON.stringify(newdata));
      &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

      您的预期输出无效

      预期输出应该是

      [{
        "data": [1, "Alex", 20]
       }, {
        "data": [
          [2, "Zara", 18],
          [2, "Zara", 19]
        ]
      }]
      

      这里有一个解决方案(香草JavaScripthttps://jsfiddle.net/mhhqj1nc/1/

      var data = [
        {
          "data" : [
                {
                  "month" : 1,
                   "name" : "Alex",
                   "sum" : 20
                }
            ]  
        },
        {
          "data" : [
                {
                  "month" : 2,
                   "name" : "Zara",
                   "sum" : 18
                },
                {
                  "month" : 2,
                  "name" : "Zara",
                  "sum" : 19
                }
            ]  
        }];
      
      var newdata = [];
      
      for(var i=0; i<data.length; i++){
        newdata.push({data: []});
        for(var j=0; j<data[i].data.length; j++){
          var keys = Object.keys(data[i].data[j]);
          var temp = [];
          for(var k in keys){
            temp.push(data[i].data[j][keys[k]]);
          }
          newdata[i].data.push(temp);
        }
      }
      
      console.log(JSON.stringify(newdata));

      希望这会对你有所帮助。

      【讨论】:

      • 感谢您的回答,但我尝试在 filename.js 中返回 $ 未定义。我错了?
      • @jane 您忘记添加jQuery 库文件。在头部添加&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;
      • 我使用 node.js 并尝试 var jquery = require('jquery');它的返回 $ 没有再次定义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多