Sự khác biệt giữa JSON.opesify và JSON.parse


452

Tôi đã bối rối khi sử dụng hai phương pháp phân tích cú pháp này.

Sau khi tôi lặp lại dữ liệu json_encoding của mình và truy xuất lại thông qua ajax, tôi thường gặp nhầm lẫn về việc khi nào tôi nên sử dụng JSON.opesifyJSON.parse .

Tôi nhận được [object,object]trong console.log của mình khi được phân tích cú pháp và một đối tượng JavaScript khi được xâu chuỗi.

$.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
Để tổng hợp các câu trả lời dưới đây: 1. Chúng là nghịch đảo của nhau. 2. kết hợp nó giúp xác thực dữ liệu hoặc biến con người có thể đọc được : json.stringify(json.parse(data)).
Hafenkranich

Câu trả lời:


674

JSON.stringify biến một đối tượng JavaScript thành văn bản JSON và lưu trữ văn bản JSON đó trong một chuỗi, ví dụ:

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 biến một chuỗi văn bản JSON thành một đối tượng JavaScript, ví dụ:

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" 

9
? JSON.stringify (JSON.parse (dữ liệu)) tôi thấy điều này trong mã ... vì vậy đây là cơ bản chuyển đổi dữ liệu json theo đối tượng và sau đó một lần nữa reconverting nó để dữ liệu json ..
HIRA Thakur

29
@MESSIAH - Vâng. Nó phần lớn là vô nghĩa, nhưng có thể đóng vai trò là trình xác nhận JSON.
Quentin

11
Cũng có thể được sử dụng một bản sao đối tượng đơn giản cho các cặp giá trị khóa đối tượng.
hunterc

4
Tôi đã tìm thấy nó rất hữu ích để gỡ lỗi trong giao diện điều khiển - nó làm cho nó dễ đọc.
kirgy

2
@Quentin bạn có thể giải thích với sự giúp đỡ của ví dụ?
Pardeep Jain

57

JSON.parse()là để "phân tích" một cái gì đó đã nhận được dưới dạng JSON.
JSON.stringify()là tạo một chuỗi JSON từ một đối tượng / mảng.


4
chính xác: nó có thể không phải là một đối tượng.
Denys Séguret

Đúng, cũng có thể là một mảng hoặc bất cứ thứ gì Javascript nhận ra là một loại nhất định. Điểm mấu chốt; nó lấy nó và chuyển đổi nó thành tương đương JSON thích hợp.
Bjorn 'Bjeaurn'

2
@dystroy - Nó phải là một đối tượng (lưu ý rằng một mảng là các đối tượng).
Quentin

2
@quentinJSON.stringify(3)
Denys Séguret

@dystroy - huh, không nhận ra họ đã mở rộng nó để đối phó với các đoạn JSON . Điều đó không trực quan.
Quentin

43

Họ là nghịch đảo của nhau. JSON.stringify()tuần tự hóa một đối tượng JS thành một chuỗi JSON, trong khi đó JSON.parse()sẽ giải tuần tự hóa một chuỗi JSON thành một đối tượng JS.


25

Họ là đối lập của nhau.

JSON.opesify ()

JSON.opesify () tuần tự hóa một đối tượng hoặc giá trị JS thành một chuỗi 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 ()

Phương thức JSON.parse () phân tích một chuỗi dưới dạng JSON, tùy ý chuyển đổi giá trị được tạo ra.

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

7
Một cái tên tốt hơn parse()sẽ là objectify()hoặc jsonify().
nu everest

Tại sao không phải là JSON.toString () và JSON.toObject ()? Tôi thích những cái tên này (đặc biệt hữu ích cho những lập trình viên mới sử dụng intellisense).
Richard Chassereau

2
bạn có thể có bài phát
Mahi

@nueverest jsonify()sẽ là mơ hồ và gây hiểu lầm, vì parse()không không chuyển đổi một Stringđến một JSONloại (đó là những gì jsonify()sẽ chỉ ra), nhưng parse()chuyển đổi một định dạng JSON String với bất kỳ: Object, Array, Number, String, Booleanhoặc null. Mọi người thường nhầm lẫn "biểu diễn chuỗi" JSON và Object(hoặc dictbằng Python, v.v.).
jbmusso

21

Thứ nhất, JSON.stringify()hàm chuyển đổi một giá trị JavaScript thành chuỗi ký hiệu đối tượng JavaScript (JSON). JSON.parse()Hàm chuyển đổi một chuỗi ký hiệu đối tượng JavaScript (JSON) thành một đối tượng. Để biết thêm thông tin về hai chức năng này, vui lòng tham khảo các liên kết sau.

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

Thứ hai, mẫu sau đây sẽ hữu ích cho bạn để hiểu hai chức năng này.

<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>

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

log = JSON.stringify(log);
console.log(log);
console.log(JSON.parse(log));

// Đầu ra sẽ là:

// Đối với Bảng điều khiển thứ 1 là một Chuỗi như:

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

// Đối với Bảng điều khiển thứ 2 là một Đối tượng Giống như:

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

6

JSON.stringify() Chuyển đổi một đối tượng thành một chuỗi.

JSON.parse() Chuyển đổi một chuỗi JSON thành một đối tượng.


2
"Sự hoàn hảo đạt được, không phải khi không còn gì để thêm, mà là khi không còn gì để lấy đi." Antoine de Saint-Exupery
Ronnie Royston

6

Sự nhầm lẫn thực sự ở đây không phải là về phân tích cú pháp so với chuỗi, mà là về kiểu dữ liệu của datatham số gọi lại thành công.

data có thể là phản hồi thô, tức là một chuỗi hoặc nó có thể là một đối tượng JavaScript, theo tài liệu:

sự thành công

Loại: Hàm (Mọi dữ liệu, Chuỗi textStatus, jqXHR jqXHR) Một hàm được gọi nếu yêu cầu thành công. Hàm được truyền ba đối số: Dữ liệu được trả về từ máy chủ, được định dạng theo tham số dataType hoặc hàm gọi lại dataFilter, nếu được chỉ định; <..>

Và DataType mặc định là cài đặt 'dự đoán thông minh'

dataType (mặc định: Đoán thông minh (xml, json, script hoặc html))

Loại: Chuỗi Loại dữ liệu mà bạn mong đợi từ máy chủ. Nếu không được chỉ định, jQuery sẽ cố gắng suy luận dựa trên loại phản hồi MIME (loại MIME XML sẽ mang lại XML, trong 1.4 JSON sẽ mang lại một đối tượng JavaScript, trong kịch bản 1.4 sẽ thực thi tập lệnh và mọi thứ khác sẽ trả lại dưới dạng một chuỗi).


2
Đây là một bổ sung rất hữu ích, bởi vì nó giúp hiểu được sự nhầm lẫn là gì!
rmcsharry

4

Đối tượng JavaScript <-> Chuỗi JSON


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

JSON.opesify (obj) - Đưa bất kỳ đối tượng tuần tự hóa nào và trả về biểu diễn JSON dưới dạng chuỗi.

JSON.stringify() -> Object To String.

JSON.parse (chuỗi) - Tạo chuỗi JSON được định dạng tốt và trả về đối tượng JavaScript tương ứng.

JSON.parse() -> String To Object.

Giải thích: JSON.opesify (obj [, thay thế [, dấu cách]]);

Alternacer / Space - tùy chọn hoặc lấy giá trị nguyên hoặc bạn có thể gọi hàm trả về kiểu interger.

function replacer(key, value) {
    if (typeof value === 'number' && !isFinite(value)) {
        return String(value);
    }
    return value;
}
  • Người thay thế Chỉ sử dụng để thay thế không hữu hạn bằng null.
  • Sử dụng không gian để thụt chuỗi Json theo khoảng trắng

4

Họ hoàn toàn trái ngược với nhau.

JSON.parse()được sử dụng để phân tích dữ liệu được nhận dưới dạng JSON ; deserializes một chuỗi JSON thành đối tượng JavaScript .

JSON.stringify()mặt khác được sử dụng để tạo một chuỗi JSON từ một đối tượng hoặc mảng ; tuần tự hóa một đối tượng JavaScript thành một chuỗi JSON .


4

Tôi không biết nếu nó được đề cập, nhưng một trong những cách sử dụng JSON.parse (JSON.opesify (myObject)) là tạo bản sao của đối tượng ban đầu.

Điều này rất hữu ích khi bạn muốn làm rối với một số dữ liệu mà không ảnh hưởng đến đối tượng ban đầu. Có lẽ không phải là cách sạch nhất / nhanh nhất nhưng chắc chắn là đơn giản nhất cho các đối tượng không phức tạp ồ ạt.


3

JSON.stringify(obj [, replacer [, space]]) - Lấy bất kỳ đối tượng tuần tự hóa nào và trả về biểu diễn JSON dưới dạng chuỗi.

JSON.parse(string) - Tạo một chuỗi JSON được hình thành tốt và trả về đối tượng JavaScript tương ứng.


3

Họ đang đối nghịch nhau. JSON.Stringify()chuyển đổi JSON thành chuỗi và JSON.Parse()phân tích chuỗi thành JSON.


1

JSON: Nó chủ yếu được sử dụng để trao đổi dữ liệu đến / từ máy chủ. Trước khi gửi đối tượng JSON đến máy chủ, nó phải là một chuỗi.

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

Nó cũng chuyển đổi mảng Javascript thành chuỗi

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 

Khi chúng tôi nhận được dữ liệu JSON từ máy chủ, dữ liệu sẽ là định dạng chuỗi. Chúng tôi chuyển đổi chuỗi thành đối tượng 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

1

JSON.parse()được sử dụng để chuyển đổi String thành Object.
JSON.stringify()được sử dụng để chuyển đổi Object thành String.

Bạn cũng có thể tham khảo điều này ...

<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>

1

JSON.parse () lấy một chuỗi JSON và biến nó thành một đối tượng JavaScript.

JSON.opesify () nhận một đối tượng JavaScript và chuyển đổi nó thành một chuỗi 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"}
Và mặc dù các phương thức thường được sử dụng trên các đối tượng, chúng cũng có thể được sử dụng trên các mảng:
const myArr = ['simon', 'gomez', 'john'];

const myArrStr = JSON.stringify(myArr);

console.log(myArrStr);
// "["simon","gomez","john"]"

console.log(JSON.parse(myArrStr));
// ["simon","gomez","john"]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.