【问题标题】:Difference between JSON.stringify and JSON.parseJSON.stringify 和 JSON.parse 之间的区别
【发布时间】:2022-01-25 01:03:22
【问题描述】:

我一直对何时使用这两种解析方法感到困惑。

在我回显我的 json_encoded 数据并通过 ajax 将其取回后,我经常对何时应该使用 JSON.stringify 和 JSON.parse 感到困惑。 p>

我在解析时在我的 console.log 中得到 [object,object],在字符串化时得到一个 JavaScript 对象。

$.ajax({
url: "demo_test.txt",
success: function(data) {
         console.log(JSON.stringify(data))
                     /* OR */
         console.log(JSON.parse(data))
        //this is what I am unsure about?
    }
});

【问题讨论】:

  • 总结以下答案: 1.它们是互为倒数的。 2. 结合它有助于验证数据或使人类可读:json.stringify(json.parse(data)).

标签: javascript json


【解决方案1】:

JSON.stringify 将 JavaScript 对象转换为 JSON 文本并将该 JSON 文本存储在字符串中,例如:

var my_object = { key_1: "some text", key_2: true, key_3: 5 };

var object_as_string = JSON.stringify(my_object);  
// "{"key_1":"some text","key_2":true,"key_3":5}"  

typeof(object_as_string);  
// "string"  

JSON.parse 将一串 JSON 文本转换为 JavaScript 对象,例如:

var object_as_string_as_object = JSON.parse(object_as_string);  
// {key_1: "some text", key_2: true, key_3: 5} 

typeof(object_as_string_as_object);  
// "object" 

【讨论】:

  • json.stringify(json.parse(data))?我在代码中看到了这个......所以这基本上是将json数据转换为对象,然后再次将其重新转换为json数据..跨度>
  • @MESSIAH — 是的。这在很大程度上没有意义,但可以用作 JSON 验证器。
  • 也可以用于对象键值对的简单对象副本。
  • 我发现它对于在控制台中调试非常有用 - 它使它易于阅读。
  • @Quentin 你能用例子解释一下吗?
【解决方案2】:

JSON.parse() 用于“解析”作为 JSON 接收的内容。
JSON.stringify() 用于从对象/数组中创建 JSON 字符串。

【讨论】:

  • precision : 它可能不是一个对象。
  • 是的,也可以是数组或 Javascript 识别为特定类型的任何内容。底线;它接受它并将其转换为适当的 JSON 等价物。
  • @dystroy — 它必须是一个对象(注意数组是对象)。
  • @quentin JSON.stringify(3)
  • @dystroy — 嗯,没有意识到他们已经将它扩展为处理 JSON 片段。这是不直观的。
【解决方案3】:

它们是彼此相反的。 JSON.stringify() 将 JS 对象序列化为 JSON 字符串,而JSON.parse() 会将 JSON 字符串反序列化为 JS 对象。

【讨论】:

    【解决方案4】:

    JSON.stringify(obj [, replacer [, space]]) - 接受任何可序列化的对象并将 JSON 表示形式作为字符串返回。

    JSON.parse(string) - 采用格式良好的 JSON 字符串并返回相应的 JavaScript 对象。

    【讨论】:

      【解决方案5】:

      JSON.stringify() 将对象转换为字符串。

      JSON.parse() 将 JSON 字符串转换为对象。

      【讨论】:

      • “达到完美,不是没有什么可添加的,而是没有什么可带走的。”安托万·德·圣埃克苏佩里
      【解决方案6】:

      JSON.parse()用于将String转换为Object。
      JSON.stringify()用于将Object转换为String。

      你也可以参考一下……

      <script type="text/javascript">
      
      function ajax_get_json(){
      
          var hr = new XMLHttpRequest();
          hr.open("GET", "JSON/mylist.json", true);
          hr.setRequestHeader("Content-type", "application/json",true);
          hr.onreadystatechange = function() {
              if(hr.readyState == 4 && hr.status == 200) {
                 /*  var return_data = hr.responseText; */
      
                 var data=JSON.parse(hr.responseText);
                 var status=document.getElementById("status");
                 status.innerHTML = "";
                 /* status.innerHTML=data.u1.country;  */
                 for(var obj in data)
                     {
                     status.innerHTML+=data[obj].uname+" is in "+data[obj].country+"<br/>";
                     }
      
              }
          }
          hr.send(null);
          status.innerHTML = "requesting...";
      }
      </script>
      

      【讨论】:

        【解决方案7】:

        首先,JSON.stringify() 函数将 JavaScript 值转换为 JavaScript 对象表示法 (JSON) 字符串。 JSON.parse() 函数将 JavaScript 对象表示法 (JSON) 字符串转换为对象。有关这两个功能的更多信息,请参考以下链接。

        https://msdn.microsoft.com/library/cc836459(v=vs.94).aspx https://msdn.microsoft.com/library/cc836466(v=vs.94).aspx

        其次,下面的示例将有助于您理解这两个功能。

        <form id="form1" runat="server">
            <div>
                <div id="result"></div>
            </div>
        </form>
        
        <script>
            $(function () {
                //define a json object
                var employee = { "name": "John Johnson", "street": "Oslo West 16", "phone": "555 1234567" };
        
                //use JSON.stringify to convert it to json string
                var jsonstring = JSON.stringify(employee);
                $("#result").append('<p>json string: ' + jsonstring + '</p>');
        
                //convert json string to json object using JSON.parse function
                var jsonobject = JSON.parse(jsonstring);
                var info = '<ul><li>Name:' + jsonobject.name + '</li><li>Street:' + jsonobject.street + '</li><li>Phone:' + jsonobject.phone + '</li></ul>';
        
                $("#result").append('<p>json object:</p>');
                $("#result").append(info);
            });
        </script>
        

        【讨论】:

          【解决方案8】:

          这里真正的困惑不是解析与字符串化,而是成功回调的data 参数的数据类型。

          data 可以是原始响应,即字符串,也可以是 JavaScript 对象,根据文档:

          成功

          类型:函数(任何数据,字符串 textStatus,jqXHR jqXHR)A 请求成功时调用的函数。函数得到 传递了三个参数:从服务器返回的数据,格式化 根据 dataType 参数或 dataFilter 回调 函数,如果指定;<..>

          并且dataType默认设置为“智能猜测”

          dataType(默认:Intelligent Guess(xml、json、script 或 html))

          Type: String 您期望从 服务器。如果没有指定,jQuery 将尝试推断它基于 响应的 MIME 类型(XML MIME 类型将产生 XML,在 1.4 JSON 将产生一个 JavaScript 对象,在 1.4 脚本将执行 脚本,其他任何内容都将作为字符串返回)。

          【讨论】:

          • 这是一个非常有用的补充,因为它有助于理解混乱的原因!
          【解决方案9】:

          它们是相互对立的。

          JSON.stringify()

          JSON.stringify() 将 JS 对象或值序列化为 JSON 字符串。

          JSON.stringify({});                  // '{}'
          JSON.stringify(true);                // 'true'
          JSON.stringify('foo');               // '"foo"'
          JSON.stringify([1, 'false', false]); // '[1,"false",false]'
          JSON.stringify({ x: 5 });            // '{"x":5}'
          
          JSON.stringify(new Date(2006, 0, 2, 15, 4, 5)) 
          // '"2006-01-02T15:04:05.000Z"'
          
          JSON.stringify({ x: 5, y: 6 });
          // '{"x":5,"y":6}' or '{"y":6,"x":5}'
          JSON.stringify([new Number(1), new String('false'), new Boolean(false)]);
          // '[1,"false",false]'
          

          JSON.parse()

          JSON.parse() 方法将字符串解析为 JSON,可选择转换生成的值。

          JSON.parse('{}');              // {}
          JSON.parse('true');            // true
          JSON.parse('"foo"');           // "foo"
          JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
          JSON.parse('null');            // null
          

          【讨论】:

          • parse() 的更好名称是 objectify() 或 jsonify()。
          • 为什么不是 JSON.toString() 和 JSON.toObject()?我更喜欢这些名称(对于使用智能感知的新程序员特别有用)。
          • @nueverest jsonify() 会模棱两可且具有误导性,因为parse() 确实不将String 转换为JSON 类型(这就是jsonify()将表示),但parse() 将 JSON 格式的 String 转换为:Object、Array、Number、String、Boolean 或 null .人们经常混淆 JSON“字符串表示”和 Object(或 Python 中的 dict 等)。
          【解决方案10】:

          JavaScript 对象 JSON 字符串


          JSON.stringify() <-> JSON.parse()
          

          JSON.stringify(obj) - 接受任何可序列化的对象并将 JSON 表示作为字符串返回。

          JSON.stringify() -> Object To String.
          

          JSON.parse(string) - 采用格式良好的 JSON 字符串并返回相应的 JavaScript 对象。

          JSON.parse() -> String To Object.
          

          解释: JSON.stringify(obj [, replacer [, space]]);

          替换器/空格 - 可选或采用整数值,或者您可以调用整数类型返回函数。

          function replacer(key, value) {
              if (typeof value === 'number' && !isFinite(value)) {
                  return String(value);
              }
              return value;
          }
          
          • Replacer Just 用于将 nonfinite no 替换为 null。
          • Json 字符串按空格缩进的空间使用

          【讨论】:

            【解决方案11】:

            他们互相反对。 JSON.Stringify() 将 JSON 转换为字符串,JSON.Parse() 将字符串解析为 JSON。

            【讨论】:

              【解决方案12】:

              它们是完全相反的。

              JSON.parse() 用于解析作为JSON接收的数据; 它反序列化一个 JSON 字符串 成一个 JavaScript 对象。

              另一方面,

              JSON.stringify() 用于从 object 或 array 中创建 JSON 字符串; 它序列化一个 JavaScript 对象 成一个 JSON 字符串。

              【讨论】:

                【解决方案13】:
                var log = { "page": window.location.href, 
                        "item": "item", 
                        "action": "action" };
                
                log = JSON.stringify(log);
                console.log(log);
                console.log(JSON.parse(log));
                

                //输出将是:

                //对于第一个控制台是一个类似的字符串:

                '{ "page": window.location.href,"item": "item","action": "action" }'
                

                //对于第二个控制台是一个类似的对象:

                Object {
                page   : window.location.href,  
                item   : "item",
                action : "action" }
                

                【讨论】:

                  【解决方案14】:

                  不知道有没有提到,但是 JSON.parse(JSON.stringify(myObject)) 的用途之一是创建原始对象的克隆。

                  当您想在不影响原始对象的情况下弄乱一些数据时,这很方便。可能不是最干净/最快的方法,但对于不是非常复杂的对象来说肯定是最简单的。

                  【讨论】:

                    【解决方案15】:

                    JSON:主要用于与服务器交换数据。发送前 JSON 对象到服务器,它必须是一个字符串。

                    JSON.stringify() //Converts the JSON object into the string representation.
                    var jsonData={"Name":"ABC","Dept":"Software"};// It is a JSON object
                    var jsonString=JSON.stringify(jsonData);// It is a string representation of the object
                    // jsonString === '{"Name":"ABC","Dept":"Software"}'; is true
                    

                    它还将Javascript数组转换为字符串

                    var arrayObject=["ABC","Software"];// It is array object
                    var arrString=JSON.stringify(array);// It is string representation of the array (object)
                    // arrString === '["ABC","Software"]'; is true 
                    

                    当我们从服务器接收到 JSON 数据时,数据将是字符串格式。因此我们将字符串转换为 JSON 对象。

                    JSON.parse() //To convert the string into JSON object.
                    var data='{ "name":"ABC", "Dept":"Software"}'// it is a string (even though it looks like an object)
                    var JsonData= JSON.parse(data);// It is a JSON Object representation of the string.
                    // JsonData === { "name":"ABC", "Dept":"Software"}; is true
                    

                    【讨论】:

                      【解决方案16】:

                      JSON.parse() 接受 JSON 字符串并将其转换为 JavaScript 对象。

                      JSON.stringify() 接受一个 JavaScript 对象并将其转换为 JSON 字符串。

                      const myObj = {
                            name: 'bipon',
                            age: 25,
                            favoriteFood: 'fish curry'
                      };
                      
                       const myObjStr = JSON.stringify(myObj);
                      
                      console.log(myObjStr);
                      // "{"name":"bipon","age":26,"favoriteFood":"fish curry"}"
                      
                      console.log(JSON.parse(myObjStr));
                       // Object {name:"bipon",age:26,favoriteFood:"fish curry"}
                      
                      虽然这些方法通常用于对象,但它们也可以用于数组:
                      const myArr = ['simon', 'gomez', 'john'];
                      
                      const myArrStr = JSON.stringify(myArr);
                      
                      console.log(myArrStr);
                      // "["simon","gomez","john"]"
                      
                      console.log(JSON.parse(myArrStr));
                      // ["simon","gomez","john"]
                      

                      【讨论】:

                        猜你喜欢
                        • 2015-06-29
                        • 2014-01-11
                        • 2014-03-26
                        • 2014-07-06
                        • 2018-03-10
                        • 1970-01-01
                        • 2017-06-10
                        • 2021-04-30
                        相关资源
                        最近更新 更多