【问题标题】:Convert JS object to JSON string将 JS 对象转换为 JSON 字符串
【发布时间】:2016-02-02 12:08:12
【问题描述】:

如果我在 JS 中定义了一个对象:

var j={"name":"binchen"};

如何将对象转换为 JSON?输出字符串应该是:

'{"name":"binchen"}'

【问题讨论】:

  • JSON.stringify() 是您正在寻找的方法。
  • 总有第一次你必须学习它。
  • JSON.stringify 也是复制对象的好方法

标签: javascript json string object


【解决方案1】:

json2.js 中找到JSON.stringify() 或在大多数现代浏览器中使用本机。

   JSON.stringify(value, replacer, space)
        value       any JavaScript value, usually an object or array.

       replacer    an optional parameter that determines how object
                    values are stringified for objects. It can be a
                    function or an array of strings.

       space       an optional parameter that specifies the indentation
                    of nested structures. If it is omitted, the text will
                    be packed without extra whitespace. If it is a number,
                    it will specify the number of spaces to indent at each
                    level. If it is a string (such as '\t' or ' '),
                    it contains the characters used to indent at each level.

       This method produces a JSON text from a JavaScript value.

【讨论】:

  • 为了更清楚一点:replacer 可选的,所以如果你想仍然使用space arg 你把null 放在replacer。如果您有兴趣使用此功能进行漂亮的打印,我发现此答案也很有用:stackoverflow.com/a/7220510/857209
  • 什么是替代品?
【解决方案2】:

查看 Thomas Frank 的更新/更好的方法:

2008 年 5 月 17 日更新:小型消毒剂 添加到 toObject 方法。 现在 toObject() 不会 eval() 字符串 如果它发现任何恶意代码 它。为了更安全:不要设置 includeFunctions 标志为 true。

Douglas Crockford,JSON 概念之父,为 JavaScript 编写了最早的字符串化器之一。后来,Trim Path 的 Steve Yen 写了一个很好的改进版本,我已经使用了一段时间。这是我对史蒂夫版本的更改,我想与您分享。基本上,它们源于我制作字符串化器的愿望:

  • 处理和恢复循环引用
  • 包括函数/方法的 JavaScript 代码(作为选项)
  • 如果需要,从 Object.prototype 中排除对象成员。

【讨论】:

    【解决方案3】:

    当前所有浏览器都内置了原生 JSON 支持。因此,只要您不处理像 IE6/7 这样的史前浏览器,您就可以轻松做到这一点:

    var j = {
      "name": "binchen"
    };
    console.log(JSON.stringify(j));

    【讨论】:

    • 下载this script以便JSON.stringify(j);工作
    • 在 nodejs 上工作,因为 node 使用相同的引擎
    • 这个答案是在 IE9 发布前一年发布的,所以在撰写本文时 IE8 确实是一个现代浏览器,或者至少它是可用的最新 IE。
    • JSON.stringify 不转换嵌套对象。任何解决方案..??
    • 如果你需要更多可读的json字符串你可以使用var formattedJSON = JSON.stringify(j, null, 2);这样的空格参数
    【解决方案4】:

    如果你有一个 json 字符串并且它没有用 [] 包裹,那么先把它包裹起来

    var str = '{"city": "Tampa", "state": "Florida"}, {"city": "Charlotte", "state": "North Carolina"}';
    str = '[' + str + ']';
    var jsonobj = $.parseJSON(str);
    

    var jsonobj = eval('(' + str + ')');
    console.log(jsonobj);
    

    【讨论】:

    • OP 正试图另辟蹊径。您的问题回答了他有一个 JSON 字符串并希望将其作为对象获取的相反情况。
    • 你已经做了相反的事情来质疑..你应该使用 JSON.stringfy() 函数
    【解决方案5】:

    如果你使用 AngularJS,'json' 过滤器应该这样做:

    <span>{{someObject | json}}</span>
    

    【讨论】:

      【解决方案6】:

      为此自定义了一个,直到我们从 stringify 方法中做奇怪的事情

      var j={"name":"binchen","class":"awesome"};
      var dq='"';
      var json="{";
      var last=Object.keys(j).length;
      var count=0;
      for(x in j)
      {
      json += dq+x+dq+":"+dq+j[x]+dq;
      count++;
      if(count<last)
         json +=",";
      }
      json+="}";
      document.write(json);
      

      输出

      {"name":"binchen","class":"awesome"}
      

      直播 http://jsfiddle.net/mailmerohit5/y78zum6v/

      【讨论】:

      • 不转义带引号的字符串,例如:“a \” in a string"
      • 那个自定义代码很不完整。不支持数组、对象和特殊字符。示例:json {"arr":["1", "2", "3"],"obj":{"a":"b"},"key\"with\\special}chars":" value"} 会输出错误的 {"arr":"1,2,3","obj":"[object Object]","key"with\special}chars":"value"} !
      • 当然,这段代码只是玩代码的一个例子。我们应该总是使用 stringify ...... JS 已经为我们完成了这项工作
      【解决方案7】:

      您可以使用 JSON.stringify() 方法将 JSON 对象转换为字符串。

      var j={"name":"binchen"};
      JSON.stringify(j)
      

      对于反向过程,您可以使用 JSON.parse() 方法将 JSON String 转换为 JSON Object。

      【讨论】:

      • 感谢添加逆过程。
      【解决方案8】:

      在 angularJS 中

      angular.toJson(obj, pretty);
      

      对象: 要序列化为 JSON 的输入。

      漂亮(可选):
      如果设置为 true,则 JSON 输出将包含换行符和空格。如果设置为整数,则 JSON 输出将包含每个缩进的那么多空格。

      (默认:2)

      【讨论】:

        【解决方案9】:

        我遇到了 stringify 内存不足的问题,而其他解决方案似乎不起作用(至少我无法让它们起作用),这是我偶然发现这个线程的时候。感谢Rohit Kumar,我只需遍历我的非常大的 JSON 对象以防止它崩溃

        var j = MyObject;
        var myObjectStringify = "{\"MyObject\":[";
        var last = j.length
        var count = 0;
        for (x in j) {
            MyObjectStringify += JSON.stringify(j[x]);
            count++;
            if (count < last)
                MyObjectStringify += ",";
        }
        MyObjectStringify += "]}";
        

        MyObjectStringify 会给你你的字符串表示(就像在这个线程中其他时候提到的那样),除非你有一个大对象,这也应该工作 - 只要确保你构建它以满足你的需要 - 我需要它有一个名称而不是数组

        【讨论】:

          【解决方案10】:

          你可以像这样使用原生字符串化函数

          const j={ "name": "binchen" }
          
          /** convert json to string */
          const jsonString = JSON.stringify(j)
          
          console.log(jsonString) // {"name":"binchen"}

          【讨论】:

            【解决方案11】:

            JSON.stringify(j, null, 4) 会给你美化 JSON,以防你也需要美化

            第二个参数是replacer。它可以用作过滤器,您可以在字符串化时过滤掉某些键值。如果设置为null,它将返回所有键值对

            【讨论】:

              【解决方案12】:

              Woking...易于使用

              $("form").submit(function(evt){
                evt.preventDefault();
                var formData = $("form").serializeArray(); // Create array of object
                var jsonConvert = JSON.stringify(formData);  // Convert to json
              });
              

              谢谢

              【讨论】:

                【解决方案13】:

                如果要获取字符串格式的json属性值,请使用以下方式

                var i = {"x":1}
                
                var j = JSON.stringify(i.x);
                
                var k = JSON.stringify(i);
                
                console.log(j);
                
                "1"
                
                console.log(k);
                
                '{"x":1}'
                

                【讨论】:

                  【解决方案14】:

                  JSON.stringify 将 Javascript 对象转换为 JSON 文本并将该 JSON 文本存储在字符串中。

                  转换是对象到字符串

                  JSON.parse 将 JSON 文本字符串转换为 Javascript 对象。

                  转换是字符串到对象

                  var j={"name":"binchen"};
                  

                  可以使用下面的 JSON 字符串。

                  JSON.stringify({"key":"value"});
                  
                  JSON.stringify({"name":"binchen"});
                  

                  有关更多信息,您可以参考下面的此链接。

                  https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

                  【讨论】:

                    【解决方案15】:

                    对于 Node JS 中的调试,您可以使用 util.inspect()。循环引用效果更好。

                    var util = require('util');
                    var j = {name: "binchen"};
                    console.log(util.inspect(j));
                    

                    【讨论】:

                      【解决方案16】:

                      现有的 JSON 替换对我来说太多了,所以我编写了自己的函数。这似乎可行,但我可能错过了几个边缘情况(在我的项目中没有发生)。并且可能不适用于任何预先存在的对象,仅适用于自制数据。

                      function simpleJSONstringify (obj) {
                          var prop, str, val,
                              isArray = obj instanceof Array;
                      
                          if (typeof obj !== "object")
                              return false;
                      
                          str = isArray ? "[" : "{";
                      
                          function quote (str) {
                              if (typeof str !== "string")
                                  str = str.toString ();
                      
                              // When the actual variable was a number, it was returning a number between quotation marks
                              // return str.match(/^\".*\"$/) ? str : '"' + str.replace(/"/g, '\\"') + '"';
                      
                              // Now, we are verifing if is a number and, if it is, we remove the quotation marks
                              str = str.match (/^\".*\"$/) ? str : '"' + str.replace (/"/g, '\\"') + '"';
                      
                              if (isNaN (str.replace (/^["]/, '').replace (/["]$/, '')))
                                  return str;
                              else
                                  return str.replace (/^["]/, '').replace (/["]$/, '');
                          }
                      
                          for (prop in obj) {
                              if (!isArray) {
                                  // quote property
                                  str += quote (prop) + ": ";
                              }
                      
                              // quote value
                              val = obj [prop];
                              str += typeof val === "object" ? simpleJSONstringify (val) : quote (val);
                              str += ", ";
                          }
                      
                          // Remove last colon, close bracket
                          str = str.substr (0, str.length - 2) + ( isArray ? "]" : "}" );
                      
                          return str;
                      }
                      

                      【讨论】:

                        【解决方案17】:
                        So in order to convert a js object to JSON String: 
                        

                        将对象转换为字符串的简单语法是

                        JSON.stringify(value)
                        

                        完整的语法是: JSON.stringify(value[, replacer[, space]])

                        让我们看一些简单的例子。请注意,整个字符串得到 如果出现双引号,则字符串中的所有数据都会被转义 需要。

                        JSON.stringify("foo bar"); // ""foo bar""
                        JSON.stringify(["foo", "bar"]); // "["foo","bar"]"
                        JSON.stringify({}); // '{}'
                        JSON.stringify({'foo':true, 'baz':false}); /* " 
                        {"foo":true,"baz":false}" */
                        
                        
                        
                        const obj = { "property1":"value1", "property2":"value2"};
                        const JSON_response = JSON.stringify(obj);
                        console.log(JSON_response);/*"{ "property1":"value1", 
                        "property2":"value2"}"*/
                        

                        【讨论】:

                        【解决方案18】:

                        使用这个,

                        var j={"name":"binchen"};
                         var myJSON = JSON.stringify(j);
                        

                        【讨论】:

                          【解决方案19】:

                          只需使用JSON.stringify 进行此类转换 - 但请记住,具有undefined 值的字段不会包含在 json 中

                          var j={"name":"binchen", "remember":undefined, "age": null };
                          
                          var s=JSON.stringify(j);
                          
                          console.log(s);

                          字段remember'消失'从输出json

                          【讨论】:

                          • 你刚刚拯救了我的一天。我无法保存我的对象。未定义值的字段不会被包含到 json 中的关键解决了我的问题!
                          【解决方案20】:

                          您可以使用 JSON.stringify() 方法将 JSON 对象转换为字符串。

                          var j={"name":"hello world"};
                          JSON.stringify(j);
                          

                          要将此字符串转换回 json 对象,您可以使用 JSON.parse() 方法。

                          【讨论】:

                            【解决方案21】:

                            使用JSON.stringify(param1, param2, param3);

                            什么是:-

                            param1 --> 要转换为 JSON 的值

                            param2 --> 以您自己的方式进行字符串化的函数。或者,它用作最终 JSON 中需要包含哪些对象的白名单。

                            param3 --> 数字数据类型,指示要添加的空格数。最多允许 10 个。

                            【讨论】:

                              【解决方案22】:

                              转换 str => obj

                              const onePlusStr = '[{"brand":"oneplus"},{"model":"7T"}]';

                              const onePLusObj = JSON.parse(onePlusStr);

                              转换 obj => str

                              const onePLusObjToStr = JSON.stringify(onePlusStr);

                              JS中JSON解析的参考:
                              JSON.parse() : click
                              JSON.stringify() : click

                              【讨论】:

                              【解决方案23】:

                              非常好用的方法,但不要在release中使用(因为可能存在兼容性问题)。

                              非常适合在您身边进行测试。

                              Object.prototype.toSource()
                              
                              //Usage:
                              obj.toSource();
                              

                              【讨论】:

                                【解决方案24】:

                                使用字符串化函数

                                var j = {
                                "name":"binchen"
                                };
                                
                                var j_json = JSON.stringify(j);
                                
                                console.log("j in json object format :", j_json);
                                

                                编码愉快!!!

                                【讨论】:

                                  【解决方案25】:

                                  使用JSON.stringify() 方法:

                                  const stringified = JSON.stringify({})  // pass object you want to convert in string format
                                  

                                  【讨论】:

                                    【解决方案26】:

                                    最流行的方式如下:

                                    var obj = {name: "Martin", age: 30, country: "United States"};   
                                    // Converting JS object to JSON string
                                    var json = JSON.stringify(obj);
                                    console.log(json);

                                    【讨论】:

                                      【解决方案27】:

                                      只需使用 JSON.stringify(your_variableName) 它会将您的 JSON 对象转换为字符串,如果您想将字符串转换为对象,请使用 JSON.parse(your_variableName)

                                      【讨论】:

                                        猜你喜欢
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2014-03-23
                                        • 1970-01-01
                                        • 2019-08-27
                                        • 2020-05-27
                                        • 1970-01-01
                                        • 2012-05-08
                                        相关资源
                                        最近更新 更多