JSON.stringify和JSON.parse之间的区别

HIR*_*KUR 435 javascript json

我一直很困惑何时使用这两种解析方法.

在我回显我的json_encoded数据并通过ajax将其检索回来之后,我经常会对何时应该使用JSON.stringifyJSON.parse感到困惑.

[object,object]在解析时进入我的console.log,在进行字符串化时进入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?
    }
});
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 648

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

JSON.parse 将一串JSON文本转换为JavaScript对象.

  • @MESSIAH - 是的.它基本上没有意义,但可以作为JSON验证器. (28认同)
  • 也可以使用简单的对象副本进行对象键值配对. (11认同)
  • json.stringify(json.parse(data))?我在代码中看到了这一点......所以这基本上是将json数据转换为对象,然后再将它重新转换为json数据. (9认同)
  • 我发现它在控制台中进行调试非常有用 - 它使它易于阅读. (4认同)
  • @Quentin你可以借助例子解释一下吗? (2认同)

Bjo*_*' S 56

JSON.parse()用于"解析"作为JSON接收的内容.
JSON.stringify()是从对象/数组创建一个JSON字符串.

  • 精度:它可能不是一个对象. (4认同)
  • @dystroy - 它必须是一个对象(注意数组是对象). (2认同)
  • @quentin`JSON.stringify(3)` (2认同)

blu*_*llu 43

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


Bhu*_*kar 24

它们是彼此的对立面.

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]'
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • `parse()`的更好名称是`objectify()`或`jsonify()`. (6认同)
  • 为什么不是 JSON.toString() 和 JSON.toObject()?我更喜欢这些名称(对于使用智能感知的新程序员尤其有用)。 (2认同)
  • 你可以发布https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify而不是复制 (2认同)

Mou*_*Mou 20

首先,JSON.stringify()函数将JavaScript值转换为JavaScript Object Notation(JSON)字符串.JSON.parse()函数将JavaScript Object Notation(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>
Run Code Online (Sandbox Code Playgroud)


kin*_*neo 15

var log = { "page": window.location.href, 
        "item": "item", 
        "action": "action" };

log = JSON.stringify(log);
console.log(log);
console.log(JSON.parse(log));
Run Code Online (Sandbox Code Playgroud)

//输出将是:

//对于1st Console是一个字符串,如:

'{ "page": window.location.href,"item": "item","action": "action" }'
Run Code Online (Sandbox Code Playgroud)

//对于第二个控制台是一个像对象:

Object {
page   : window.location.href,  
item   : "item",
action : "action" }
Run Code Online (Sandbox Code Playgroud)


Ham*_*ava 6

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

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

  • 这绝对没有增加任何尚未说过的内容. (36认同)
  • "实现完美,而不是在没有其他任何东西需要补充的时候,但是什么时候都没有东西可以带走." Antoine de Saint-Exupery (2认同)

Pat*_*ick 6

这里真正的混淆不是关于parse vs stringify,而是关于data成功回调的参数的数据类型.

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

成功

类型:Function(Anything data,String textStatus,jqXHR jqXHR)如果请求成功则调用的函数.该函数传递三个参数:从服务器返回的数据,根据dataType参数或dataFilter回调函数格式化(如果指定); <..>

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

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

类型:字符串您期望从服务器返回的数据类型.如果没有指定,jQuery将尝试根据响应的MIME类型推断它(XML MIME类型将产生XML,在1.4 JSON中将产生一个JavaScript对象,在1.4脚本中将执行脚本,其他任何东西将是以字符串形式返回).

  • 这是一个非常有用的补充,因为它有助于理解混乱是什么! (2认同)

小智 6

它们是完全相反的。

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

JSON.stringify()另一方面用于从对象数组中创建JSON 字符串序列化一个JavaScript对象JSON字符串


小智 5

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

当您想要弄乱某些数据而不影响原始对象时,这很方便。可能不是最干净/最快的方法,但对于不太复杂的对象来说肯定是最简单的方法。