【问题标题】:Convert array to JSON将数组转换为 JSON
【发布时间】:2011-01-18 17:23:57
【问题描述】:

我有一个数组var cars = [2,3,..],其中包含几个整数。 我已经向数组中添加了一些值,但我现在需要通过 jQuery 的 .get 方法将此数组发送到页面。如何将其转换为 JSON 对象进行发送?

【问题讨论】:

  • 只是仔细检查:您要发送到页面的数组是 JavaScript 数组还是在服务器上?
  • 这是一个 Javascript 数组,我会将其发送到 Python 脚本,Python 将使用 JSON 字符串并使用它。

标签: javascript jquery json arrays


【解决方案1】:

向后兼容的脚本: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

然后调用:

var myJsonString = JSON.stringify(yourArray);

注意: JSON 对象现在是大多数现代网络浏览器(IE 8 及更高版本)的一部分。有关完整列表,请参阅caniuse。致谢:@Spudley 在下面发表评论

【讨论】:

  • 这行得通,jQuery有这样的功能吗?如果 jQuery 已经有函数,我不想附加另一个 js 文件。
  • jQuery 在 1.4.1 中实现了 JSON.parse,但没有 JSON.stringify ...
  • 是的,我很惊讶 jQuery 也没有内置这个
  • 对于仍在阅读此答案的任何人,值得指出的是,所有现代浏览器都包含 JSON 对象作为标准,这意味着 您不需要此脚本,除非您计划支持较旧的浏览器,例如 IE7 或 Firefox 3.0。有关支持图表,请参阅 CanIUse
  • 值得指出的是,您可以在浏览器控制台中执行此操作:var a = [paste]; JSON.stringify(a)
【解决方案2】:

我是这样做的:

如果我有:

var jsonArg1 = new Object();
    jsonArg1.name = 'calc this';
    jsonArg1.value = 3.1415;
var jsonArg2 = new Object();
    jsonArg2.name = 'calc this again';
    jsonArg2.value = 2.73;

var pluginArrayArg = new Array();
    pluginArrayArg.push(jsonArg1);
    pluginArrayArg.push(jsonArg2);

将pluginArrayArg(纯javascript数组)转换成JSON数组:

var jsonArray = JSON.parse(JSON.stringify(pluginArrayArg))

【讨论】:

  • 你救了我的命
【解决方案3】:

哇,现在似乎变得更容易了...您可以通过 3 种方法来做到这一点:

json = { ...array };

json = Object.assign({}, array);

json = array.reduce((json, value, key) => { json[key] = value; return json; }, {});

【讨论】:

  • jsonString = JSON.stringify({ ...array })
【解决方案4】:

我决定使用 json2 库,但收到关于“循环数据结构”的错误。

我通过告诉 json2 如何转换我的复杂对象来解决它。它不仅现在有效,而且我只包含了我需要的字段。这是我的做法:

OBJ.prototype.toJSON = function (key) {
       var returnObj = new Object();
       returnObj.devid = this.devid;
       returnObj.name = this.name;
       returnObj.speed = this.speed;
       returnObj.status = this.status;
       return returnObj;
   }

【讨论】:

    【解决方案5】:

    或者尝试将数组定义为对象。 (var cars = {};) 那么就不用转成json了。这在您的示例中可能不实用,但对我来说效果很好。

    【讨论】:

      【解决方案6】:

      另一种方式可能是这样的:

              var json_arr = {};
              json_arr["name1"] = "value1";
              json_arr["name2"] = "value2";
              json_arr["name3"] = "value3";
      
              var json_string = JSON.stringify(json_arr);
      

      【讨论】:

        【解决方案7】:

        因为我的数组如下所示: 我使用 .push 函数动态创建它

        my_array = ["234", "23423"];
        

        我将数组转换为 json 的唯一方法是

        json = Object.assign({}, my_array);
        

        【讨论】:

          【解决方案8】:

          如果您只有 1 个与您要求的对象类似的对象,则以下方法将起作用。

          var x = [{'a':'b'}];
          var b= JSON.stringify(x);
          var c = b.substring(1,b.length-1);
          JSON.parse(c); 
          

          【讨论】:

            【解决方案9】:

            最短的

            要从整数数组生成有效的 json,请使用

            let json = `[${cars}]`
            

            对于更通用的数组,请使用 JSON.stringify(cars)(对于具有循环引用的对象,请使用 this

            let cars = [1,2,3]; cars.push(4,5,6);
            
            let json = `[${cars}]`;
            
            console.log(json);
            console.log(JSON.parse(json)); // json validation

            【讨论】:

              【解决方案10】:

              您可以使用 Object.assign 函数将数组转换为 JSON。我遇到的主要问题是 Javascript 数组有一个从零开始的整数键,这反过来又允许访问数组中的数据。

              let fruits = ['Apple', 'Banana']
              document.write(fruits[0])
              

              返回:

              苹果

              当您将数组转换为 JSON 时,您会得到

              {"0": "Apple", "1: "Banana"}
              

              相反,JSON 对象通常包含任意键,例如:

              { "some_key": "一些值", "other_key: "其他值" }

              令人高兴的是,您可以创建一个项目列表,它几乎就像一个数组一样工作,然后像使用数组一样使用 Object.assign,然后将输出转换为 JSON 对象

              var items = {};
              items["some_key"]="some value";
              items["other_key"]="some other value";
              const jsonString = JSON.stringify(Object.assign({}, items)) 
              const json_obj = JSON.parse(jsonString);
              

              使用项目列表的优点是您不必将 JSON 数据作为字符串或引号、逗号等来处理……您可以只管理项目对象,将数据填充或删除。完成后,您只需将 item 变量转换为 JSON 对象,然后对它做任何您需要做的事情。

              【讨论】:

                【解决方案11】:

                使用您的汽车数组:var cars = [2,3,..]。你可以像这样使用for循环

                    var carArray = new Array();  
                
                    for(var c in cars) {
                      var jsonObj = new Object();
                      jsonObj.car_id = cars[c];
                      carArray.push(jsonObj);
                    }
                    
                

                【讨论】:

                  猜你喜欢
                  • 2014-05-26
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-01-23
                  • 2014-10-10
                  • 2011-08-02
                  相关资源
                  最近更新 更多