ความแตกต่างระหว่าง JSON.stringify และ JSON.parse


452

ฉันสับสนเมื่อต้องใช้วิธีการแยกวิเคราะห์ทั้งสองนี้

หลังจากที่ผมสะท้อนข้อมูล json_encoded ของฉันและดึงมันกลับมาทางอาแจ็กซ์ผมมักจะวิ่งเข้ามาในความสับสนเกี่ยวกับเมื่อฉันควรใช้JSON.stringifyและJSON.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?
    }
});

1
เพื่อสรุปคำตอบด้านล่าง: 1. พวกมันคือสิ่งที่ตรงกันข้ามกัน 2. json.stringify(json.parse(data))ร่วมกันจะช่วยให้ตรวจสอบข้อมูลหรือเปิดการอ่านของมนุษย์:
Hafenkranich

คำตอบ:


674

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" 

9
json.stringify (json.parse (data)) ฉันเห็นสิ่งนี้ในรหัส ... ดังนั้นนี่คือการแปลงข้อมูล json เป็นวัตถุแล้วแปลงเป็นข้อมูล json อีกครั้ง
HIRA THAKUR

29
@ MESSIAH - ใช่ ส่วนใหญ่ไม่มีจุดหมาย แต่อาจทำหน้าที่เป็นเครื่องมือตรวจสอบ JSON
Quentin

11
นอกจากนี้ยังสามารถใช้คัดลอกวัตถุอย่างง่ายสำหรับการจับคู่ค่าคีย์วัตถุ
hunterc

4
ฉันพบว่ามันมีประโยชน์มากสำหรับการดีบักในคอนโซล - ทำให้อ่านได้ง่าย
kirgy

2
@Quentin คุณสามารถอธิบายด้วยความช่วยเหลือของตัวอย่าง?
Pardeep Jain

57

JSON.parse()ใช้สำหรับ "การวิเคราะห์คำ" บางสิ่งที่ได้รับเป็น JSON
JSON.stringify()คือการสร้างสตริง JSON จากวัตถุ / อาร์เรย์


4
ความแม่นยำ: มันอาจไม่ใช่วัตถุ
Denys Séguret

จริงอาจเป็นอาร์เรย์หรืออะไรก็ได้ที่จาวาสคริปต์ยอมรับว่าเป็นประเภทที่แน่นอน bottomline; ใช้เวลาและแปลงเป็น JSON ที่เหมาะสม
Bjorn 'Bjeaurn' S

2
@dystroy - มันจะต้องเป็นวัตถุ (สังเกตว่าอาร์เรย์เป็นวัตถุ)
Quentin

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

@dystroy - ฮะไม่ได้ตระหนักว่าพวกเขาต้องการขยายการจัดการกับ JSON เศษ นั่นไม่ได้ใช้งานง่าย
Quentin

43

พวกเขาเป็นสิ่งที่ตรงกันข้ามกัน JSON.stringify()อนุกรมวัตถุ JS เป็นสตริง JSON ในขณะที่JSON.parse()จะ deserialize สตริง JSON เป็นวัตถุ JS


25

พวกเขาเป็นสิ่งที่ตรงกันข้ามของกันและกัน

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

7
ชื่อที่ดีกว่าสำหรับparse()จะเป็นหรือobjectify() jsonify()
nu everest

ทำไมไม่ใช้ JSON.toString () และ JSON.toObject () ฉันต้องการชื่อเหล่านี้ (โดยเฉพาะอย่างยิ่งมีประโยชน์สำหรับโปรแกรมเมอร์ใหม่ที่ใช้ intellisense)
Richard Chassereau

2
คุณสามารถโพสต์developer.mozilla.org/en/docs/Web/JavaScript/Reference/ ...... แทนการคัดลอก
Mahi

@nueverest jsonify()จะคลุมเครือและทำให้เข้าใจผิดเนื่องจากparse()ไม่ได้แปลงStringไปเป็นJSONชนิด (ซึ่งเป็นสิ่งที่jsonify()จะแสดงให้เห็น) แต่parse()แปลงรูปแบบ JSON Stringใด ๆ ของ: Object, Array, Number, String, หรือBoolean nullคนมักจะสับสน JSON "การแสดงสตริง" และObject(หรือdictใน Python ฯลฯ )
jbmusso

21

ประการแรก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>

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

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

// ผลลัพธ์จะเป็น:

// สำหรับ 1st Console นั้นเป็นคำสั่ง String:

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

// สำหรับ 2nd Console นั้นเป็น Object Like:

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

6

JSON.stringify() แปลงวัตถุเป็นสตริง

JSON.parse() แปลงสตริง JSON เป็นวัตถุ


2
"ความสมบูรณ์แบบสำเร็จไม่ใช่เมื่อไม่มีอะไรจะเพิ่มเติมอีกต่อไป แต่เมื่อไม่มีอะไรเหลือให้นำออกไป" Antoine de Saint-Exupery
Ronnie Royston

6

ความสับสนที่แท้จริงที่นี่ไม่ได้เกี่ยวกับการแยกวิเคราะห์เทียบกับการทำให้เป็นสตริง แต่เป็นเรื่องเกี่ยวกับชนิดข้อมูลของdataพารามิเตอร์ของการเรียกกลับสำเร็จ

data สามารถเป็นได้ทั้งการตอบสนองดิบเช่นสตริงหรืออาจเป็นวัตถุ JavaScript ตามเอกสาร:

ความสำเร็จ

ประเภท: ฟังก์ชั่น (ข้อมูลอะไรก็ตาม, ข้อความ textStatus, jqXHR jqXHR) ฟังก์ชั่นที่จะเรียกว่าถ้าคำขอประสบความสำเร็จ ฟังก์ชั่นได้รับการผ่านสามข้อโต้แย้ง: ข้อมูลที่ส่งคืนจากเซิร์ฟเวอร์จัดรูปแบบตามพารามิเตอร์ dataType หรือฟังก์ชั่นการโทรกลับ dataFilter ถ้าระบุ; <.. >

และค่าเริ่มต้น dataType เป็นการตั้งค่าของ 'การคาดเดาอัจฉริยะ'

dataType (ค่าเริ่มต้น: Intelligent Guess (xml, json, script หรือ html))

Type: String ประเภทของข้อมูลที่คุณคาดหวังจากเซิร์ฟเวอร์ หากไม่มีการระบุไว้ jQuery จะพยายามสรุปโดยยึดตามประเภท MIME ของการตอบกลับ (ประเภท XML MIME จะให้ผลลัพธ์ XML ใน 1.4 JSON จะให้ผลกับวัตถุ JavaScript ใน 1.4 สคริปต์จะเรียกใช้สคริปต์และสิ่งอื่นจะเป็นเช่นนั้น ส่งคืนเป็นสตริง)


2
นี่เป็นส่วนเสริมที่มีประโยชน์มากเพราะช่วยให้เข้าใจว่าความสับสนเป็นอย่างไร!
rmcsharry

4

วัตถุ JavaScript <-> สตริง JSON


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

JSON.stringify (obj) - ใช้วัตถุใด ๆ ที่สามารถทำให้เป็นอนุกรมและส่งกลับการแสดง JSON เป็นสตริง

JSON.stringify() -> Object To String.

JSON.parse (สตริง) - รับสตริง JSON ที่มีรูปแบบที่ดีและส่งคืนอ็อบเจ็กต์ JavaScript ที่สอดคล้องกัน

JSON.parse() -> String To Object.

คำอธิบาย: JSON.stringify (obj [, replacer [, space]]);

Replacer / Space - เป็นทางเลือกหรือรับค่าจำนวนเต็มหรือคุณสามารถเรียกฟังก์ชันส่งคืนชนิด interger

function replacer(key, value) {
    if (typeof value === 'number' && !isFinite(value)) {
        return String(value);
    }
    return value;
}
  • Replacer ใช้สำหรับแทนที่ non finite no ด้วย null เท่านั้น
  • การใช้พื้นที่สำหรับการเยื้อง Json String ตามช่องว่าง

4

มันเป็นสิ่งที่ตรงกันข้ามกันอย่างสมบูรณ์

JSON.parse()คือใช้สำหรับการแยกวิเคราะห์ข้อมูลที่ได้รับเป็นJSON ; มันdeserializes สตริง JSONเป็นวัตถุ JavaScript

JSON.stringify()ในมืออื่น ๆ ที่ใช้ในการสร้างสตริง JSONออกมาจากวัตถุหรืออาร์เรย์ ; มันserializes วัตถุ JavaScriptเป็นสตริง JSON


4

ฉันไม่ทราบว่ามีการพูดถึง แต่หนึ่งในการใช้งานของ JSON.parse (JSON.stringify (myObject)) คือการสร้างโคลนของวัตถุต้นฉบับ

สิ่งนี้มีประโยชน์เมื่อคุณต้องการยุ่งกับข้อมูลบางอย่างโดยไม่มีผลกับวัตถุต้นฉบับ อาจไม่ใช่วิธีที่สะอาด / เร็วที่สุด แต่แน่นอนว่าง่ายที่สุดสำหรับวัตถุที่ไม่ซับซ้อนอย่างหนาแน่น


3

JSON.stringify(obj [, replacer [, space]]) - ใช้วัตถุใด ๆ ที่สามารถทำให้เป็นอนุกรมและส่งคืนการแทน JSON เป็นสตริง

JSON.parse(string) - รับสตริง JSON ที่มีรูปแบบถูกต้องและส่งคืนวัตถุ JavaScript ที่สอดคล้องกัน



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

1

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>

1

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"]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.