476

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

在我回显我的 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?
    }
});
4

17 回答 17

707

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" 
于 2013-07-22T10:49:06.620 回答
59

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

于 2013-07-22T10:49:54.213 回答
48

They are the inverse of each other. JSON.stringify() serializes a JS object into a JSON string, whereas JSON.parse() will deserialize a JSON string into a JS object.

于 2014-05-08T07:28:59.620 回答
30

它们是彼此的对立面。

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
于 2016-04-12T06:36:07.100 回答
22

首先,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>
于 2015-07-13T08:04:03.007 回答
14
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" }
于 2016-10-19T10:09:55.413 回答
9

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

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

于 2015-04-08T05:42:25.230 回答
9

The real confusion here is not about parse vs stringify, it's about the data type of the data parameter of the success callback.

data can be either the raw response, i.e a string, or it can be an JavaScript object, as per the documentation:

success

Type: Function( Anything data, String textStatus, jqXHR jqXHR ) A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the dataType parameter or the dataFilter callback function, if specified;<..>

And the dataType defaults to a setting of 'intelligent guess'

dataType (default: Intelligent Guess (xml, json, script, or html))

Type: String The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string).

于 2016-02-23T05:36:29.983 回答
6

它们是完全相反的。

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

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

于 2016-09-03T07:41:50.957 回答
4

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

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

于 2016-10-23T18:19:30.770 回答
4

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

于 2016-07-09T08:51:23.540 回答
4

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]]);

Replacer/Space - 可选或采用整数值,或者您可以调用整数类型返回函数。

function replacer(key, value) {
    if (typeof value === 'number' && !isFinite(value)) {
        return String(value);
    }
    return value;
}
  • Replacer Just 用于将非有限 no 替换为 null。
  • 按空格缩进 Json 字符串的空间使用
于 2016-05-10T05:08:43.157 回答
3

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

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

于 2014-11-08T10:15:59.257 回答
1

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
于 2017-10-03T06:04:33.880 回答
0

JSON.parse()用于将字符串转换为对象。
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>
于 2015-07-10T11:16:54.070 回答
0

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"]
于 2019-04-23T06:57:53.257 回答
0

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

const myObject = { 狗:“”,猫:“”,考拉:“”,计数:3 };

console.log(JSON.stringify(myObject)); // 结果: {"dog":"","cat":"","koala":"","count":3}

console.log(JSON.parse(JSON.stringify(myObject))); // 结果:Object {dog: "", cat: "", koala: "", count: 3}

于 2022-02-02T12:04:23.997 回答