แปลงวัตถุ JS เป็นสตริง JSON


1244

ถ้าฉันกำหนดวัตถุใน JS ด้วย:

var j={"name":"binchen"};

ฉันจะแปลงวัตถุเป็น JSON ได้อย่างไร สตริงเอาต์พุตควรเป็น:

'{"name":"binchen"}'

63
JSON.stringify()เป็นวิธีที่คุณมองหา
Gowtham Gopalakrishnan

10
มีเสมอเป็นครั้งแรกที่คุณต้องเรียนรู้
Egan Wolf

คำตอบ:


1922

เบราว์เซอร์ปัจจุบันทั้งหมดมีการสนับสนุน JSON ดั้งเดิมอยู่ภายในตราบใดที่คุณไม่ได้ติดต่อกับเบราว์เซอร์ยุคก่อนประวัติศาสตร์เช่น IE6 / 7 คุณสามารถทำได้ง่ายๆเช่นเดียวกับที่:

var j = {
  "name": "binchen"
};
console.log(JSON.stringify(j));


5
ดาวน์โหลดสคริปต์นี้เพื่อให้JSON.stringify(j);สามารถใช้งานได้
AabinGunz

2
ทำงานบน nodejs เพราะ node ใช้ engine เดียวกัน
georgelviv

26
คำตอบนี้ถูกโพสต์เมื่อหนึ่งปีก่อนที่ IE9 จะวางจำหน่ายดังนั้นในขณะที่เขียน IE8 นั้นเป็นเบราว์เซอร์ที่ทันสมัยหรืออย่างน้อยก็เป็น IE รุ่นใหม่ล่าสุด
Andris

JSON.stringify ไม่แปลงวัตถุที่ซ้อนกัน ทางออกใด ๆ ที่ .. ?
Ritesh

9
หากคุณต้องการสตริง json ที่อ่านได้มากขึ้นคุณสามารถใช้พารามิเตอร์ space เช่นvar formattedJSON = JSON.stringify(j, null, 2);
Jacek Gzel

110

กับJSON.stringify()ที่พบในjson2.jsหรือพื้นเมืองในเบราว์เซอร์ที่ทันสมัยที่สุด

   JSON.stringify(value, replacer, space)
        value       any JavaScript value, usually an object or array.

       replacer    an optional parameter that determines how object
                    values are stringified for objects. It can be a
                    function or an array of strings.

       space       an optional parameter that specifies the indentation
                    of nested structures. If it is omitted, the text will
                    be packed without extra whitespace. If it is a number,
                    it will specify the number of spaces to indent at each
                    level. If it is a string (such as '\t' or ' '),
                    it contains the characters used to indent at each level.

       This method produces a JSON text from a JavaScript value.

6
สำหรับความคมชัดมากขึ้นอีกนิด: replacer เป็นตัวเลือกดังนั้นหากคุณต้องการที่จะยังคงใช้spaceหาเรื่องคุณใส่สำหรับnull replacerหากคุณสนใจที่จะใช้ฟังก์ชั่นนี้สำหรับการพิมพ์ที่สวยงามฉันพบว่าคำตอบนี้มีประโยชน์เช่น: stackoverflow.com/a/7220510/857209
Glenn Lawrence

34

ลองใช้วิธีปรับปรุง / วิธีที่ดีกว่าโดย Thomas Frank:

อัปเดต 17 พฤษภาคม 2551: เพิ่มน้ำยาฆ่าเชื้อขนาดเล็กลงใน toObject-method ตอนนี้ toObject () จะไม่ eval () สตริงหากพบโค้ดที่เป็นอันตรายใด ๆ ในนั้นเพื่อความปลอดภัยที่มากยิ่งขึ้น: อย่าตั้งค่าสถานะ includeFunctions เป็น true

Douglas Crockford พ่อของแนวคิด JSON เขียนหนึ่งใน stringifiers แรกสำหรับ JavaScript หลังจากนั้น Steve Yen ที่ Trim Path ได้เขียนปรับปรุงเวอร์ชั่นที่ดีซึ่งฉันใช้ไประยะหนึ่งแล้ว มันเป็นการเปลี่ยนแปลงของฉันในเวอร์ชันของสตีฟที่ฉันต้องการแบ่งปันกับคุณ โดยพื้นฐานแล้วพวกเขาเกิดจากความปรารถนาของฉันที่จะทำให้ stringifier:

  • จัดการและกู้คืนการอ้างอิงตามวัฏจักร
  • รวมรหัส JavaScript สำหรับฟังก์ชั่น / วิธีการ (เป็นตัวเลือก)
  • แยกสมาชิกวัตถุออกจาก Object.prototype หากจำเป็น

23

คุณสามารถใช้วิธีJSON.stringify ()เพื่อแปลงวัตถุ JSON เป็น String

var j={"name":"binchen"};
JSON.stringify(j)

สำหรับกระบวนการย้อนกลับคุณสามารถใช้วิธีJSON.parse ()เพื่อแปลงสตริง JSON เป็นวัตถุ JSON


ขอขอบคุณที่เพิ่มกระบวนการย้อนกลับ
David Lavieri

12

ในเชิงมุม JS

angular.toJson(obj, pretty);

obj: อินพุตที่จะต่อเนื่องเป็น JSON

สวย (optional):
หากตั้งค่าเป็นจริงเอาต์พุต JSON จะมีบรรทัดใหม่และช่องว่าง หากตั้งค่าเป็นจำนวนเต็มเอาต์พุต JSON จะมีช่องว่างจำนวนมากต่อการเยื้อง

(ค่าเริ่มต้น: 2)


12

JSON.stringify(j, null, 4) จะให้ JSON ที่สวยงามแก่คุณในกรณีที่คุณต้องการความสวยงามด้วย

พารามิเตอร์ที่สองคือ replacer มันสามารถใช้เป็นตัวกรองที่คุณสามารถกรองค่าคีย์บางอย่างเมื่อทำการสตริง หากตั้งค่าเป็น null มันจะส่งคืนคู่ของค่าคีย์ทั้งหมด



9

JSON.stringify เปลี่ยนวัตถุ Javascript เป็นข้อความ JSON และเก็บข้อความ JSON นั้นในสตริง

การแปลงเป็นObject to String

JSON.parse เปลี่ยนสตริงของข้อความ JSON เป็นวัตถุ Javascript

การแปลงเป็นสตริงเป็นวัตถุ

var j={"name":"binchen"};

เพื่อให้สามารถใช้ JSON String ได้

JSON.stringify({"key":"value"});

JSON.stringify({"name":"binchen"});

สำหรับข้อมูลเพิ่มเติมคุณสามารถดูลิงค์นี้ด้านล่าง

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify


7

หนึ่งที่กำหนดเองที่กำหนดไว้สำหรับเรื่องนี้จนกว่าเราจะแปลกจากวิธีการ stringify

var j={"name":"binchen","class":"awesome"};
var dq='"';
var json="{";
var last=Object.keys(j).length;
var count=0;
for(x in j)
{
json += dq+x+dq+":"+dq+j[x]+dq;
count++;
if(count<last)
   json +=",";
}
json+="}";
document.write(json);

เอาท์พุท

{"name":"binchen","class":"awesome"}

สด http://jsfiddle.net/mailmerohit5/y78zum6v/


ไม่หลีกเลี่ยงสตริงที่มีเครื่องหมายคำพูดเช่น: "a \" ในสตริง "
alphakevin

1
รหัสที่กำหนดเองนั้นไม่สมบูรณ์มาก ไม่รองรับอาร์เรย์วัตถุและตัวอักษรพิเศษ ตัวอย่าง: the json {"arr": ["1", "2", "3"], "obj": {"a": "b"}, "key \" พร้อมตัวอักษร \\ special} ":" ค่า "} จะส่งออก {" arr ":" 1,2,3 "," obj ":" [วัตถุวัตถุ] "," คีย์ "ด้วยตัวอักษรพิเศษ \"} "" ค่า "} ที่ผิด!
Manuel Romeiro

7

ฉันมีปัญหาเกี่ยวกับ stringify หน่วยความจำไม่เพียงพอและวิธีแก้ปัญหาอื่น ๆ ดูเหมือนจะไม่ทำงาน (อย่างน้อยฉันก็ไม่สามารถทำให้มันทำงานได้) ซึ่งเป็นช่วงที่ฉันสะดุดกับหัวข้อนี้ ขอบคุณRohit Kumarฉันแค่วนซ้ำวัตถุ JSON ที่มีขนาดใหญ่มากของฉันเพื่อหยุดการทำงานล้มเหลว

var j = MyObject;
var myObjectStringify = "{\"MyObject\":[";
var last = j.length
var count = 0;
for (x in j) {
    MyObjectStringify += JSON.stringify(j[x]);
    count++;
    if (count < last)
        MyObjectStringify += ",";
}
MyObjectStringify += "]}";

MyObjectStringify จะให้สตริงของคุณเป็นตัวแทน (เช่นเวลาอื่น ๆ ที่กล่าวถึงในหัวข้อนี้) ยกเว้นถ้าคุณมีวัตถุขนาดใหญ่สิ่งนี้ควรใช้งานได้ - ตรวจสอบให้แน่ใจว่าคุณสร้างมันให้เหมาะกับความต้องการของคุณ - ฉันต้องการให้มีชื่อมากกว่าอาร์เรย์


5

Woking ... ใช้งานง่าย

$("form").submit(function(evt){
  evt.preventDefault();
  var formData = $("form").serializeArray(); // Create array of object
  var jsonConvert = JSON.stringify(formData);  // Convert to json
});

ขอบคุณ



3

หากคุณต้องการรับค่าคุณสมบัติ json ในรูปแบบสตริงให้ใช้วิธีต่อไปนี้

var i = {"x":1}

var j = JSON.stringify(i.x);

var k = JSON.stringify(i);

console.log(j);

"1"

console.log(k);

'{"x":1}'

3

สำหรับการแก้จุดบกพร่องในโหนด JS คุณสามารถใช้util.inspect () มันทำงานได้ดีขึ้นด้วยการอ้างอิงแบบวงกลม

var util = require('util');
var j = {name: "binchen"};
console.log(util.inspect(j));

3

การแทนที่ JSON ที่มีอยู่ซึ่งมากเกินไปสำหรับฉันดังนั้นฉันจึงเขียนฟังก์ชันของตัวเอง ดูเหมือนว่าจะใช้งานได้ แต่ฉันอาจพลาดกรณีขอบหลายอย่าง (ที่ไม่ได้เกิดขึ้นในโครงการของฉัน) และอาจจะไม่ทำงานกับวัตถุที่มีอยู่แล้วใด ๆ เท่านั้นสำหรับข้อมูลที่สร้างขึ้นเอง

function simpleJSONstringify(obj) {
    var prop, str, val,
        isArray = obj instanceof Array;

    if (typeof obj !== "object") return false;

    str = isArray ? "[" : "{";

    function quote(str) {
        if (typeof str !== "string") str = str.toString();
        return str.match(/^\".*\"$/) ? str : '"' + str.replace(/"/g, '\\"') + '"'
    }

    for (prop in obj) {
        if (!isArray) {
            // quote property
            str += quote(prop) + ": ";
        }

        // quote value
        val = obj[prop];
        str += typeof val === "object" ? simpleJSONstringify(val) : quote(val);
        str += ", ";
    }

    // Remove last colon, close bracket
    str = str.substr(0, str.length - 2)  + ( isArray ? "]" : "}" );

    return str;
}

2
So in order to convert a js object to JSON String: 

ไวยากรณ์อย่างง่ายสำหรับการแปลงวัตถุเป็นสตริงคือ

JSON.stringify(value)

ไวยากรณ์แบบเต็มคือ: JSON.stringify (ค่า [, replacer [, space]])

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

JSON.stringify("foo bar"); // ""foo bar""
JSON.stringify(["foo", "bar"]); // "["foo","bar"]"
JSON.stringify({}); // '{}'
JSON.stringify({'foo':true, 'baz':false}); /* " 
{"foo":true,"baz":false}" */



const obj = { "property1":"value1", "property2":"value2"};
const JSON_response = JSON.stringify(obj);
console.log(JSON_response);/*"{ "property1":"value1", 
"property2":"value2"}"*/

2
มันจะดีถ้าคุณสามารถให้คำอธิบายสั้น ๆ เกี่ยวกับรหัสของคุณ
jonny

สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม เมื่อคุณมีเพียงพอชื่อเสียงคุณจะสามารถที่จะแสดงความคิดเห็นในโพสต์ใด ๆ ; แทนที่จะให้คำตอบที่ไม่จำเป็นต้องชี้แจงจากผู้ถาม - จากการรีวิว
Rafael

ฉันได้แก้ไขคำตอบของฉันขอบคุณมากสำหรับการชี้ให้เห็น @Rafael และ @ jonny
Rahul Choudhary

1

เพียงใช้JSON.stringifyเพื่อทำการแปลง - อย่างไรก็ตามโปรดจำไว้ว่าเขตข้อมูลที่มีundefinedค่าจะไม่รวมอยู่ใน json

var j={"name":"binchen", "remember":undefined, "age": null };

var s=JSON.stringify(j);

console.log(s);

ฟิลด์remember'หายไป' จากเอาต์พุต json


คุณเพิ่งบันทึกวันของฉัน ฉันไม่สามารถบันทึกวัตถุของฉันได้ กุญแจที่เขตข้อมูลที่มีค่าไม่ได้กำหนดจะไม่รวมอยู่ใน json แก้ปัญหาของฉัน!
Mohammad Ghonchesefidi

0

คุณสามารถใช้วิธี JSON.stringify () เพื่อแปลงวัตถุ JSON เป็น String

var j={"name":"hello world"};
JSON.stringify(j);

ในการแปลงสตริงนี้กลับไปเป็นวัตถุ json คุณสามารถใช้วิธี JSON.parse ()


0

ใช้ JSON.stringify(param1, param2, param3);

คืออะไร: -

param1 -> ค่าที่จะแปลงเป็น JSON

param2 -> ฟังก์ชั่นเพื่อทำให้เป็นก้อนในแบบของคุณเอง อีกทางหนึ่งมันทำหน้าที่เป็นรายการสีขาวที่วัตถุจะต้องรวมอยู่ใน JSON สุดท้าย

param3 -> ชนิดข้อมูล Number ซึ่งระบุจำนวนช่องว่างที่ต้องการเพิ่ม จำนวนสูงสุดที่อนุญาตคือ 10


0

แปลง str => obj

const onePlusStr = '[{"แบรนด์": "oneplus"}, {"แบบจำลอง": "7T"}]';

const onePLusObj = JSON.parse (onePlusStr);

แปลง obj => str

const onePLusObjToStr = JSON.stringify (onePlusStr);

การอ้างอิงการแยกวิเคราะห์ JSON ใน JS:
JSON.parse (): คลิก
JSON.stringify (): คลิก


คุณสามารถให้ข้อมูลเพิ่มเติมได้หรือไม่ ข้อมูลอ้างอิงอื่น ๆ
Nodejs-nerd

การอ้างอิงการแยกวิเคราะห์ JSON ใน JS: JSON.parse (): w3schools.com/js/js_json_parse.asp JSON.stringify (): w3schools.com/js/js_json_stringify.asp
yash

ขอบคุณคุณสามารถแก้ไขคำตอบเพื่อรวมสิ่งนี้
ไหม Nodejs-nerd

0

วิธีการใช้งานง่ายมาก แต่ไม่ได้ใช้ในรีลีส (เนื่องจากปัญหาความเข้ากันได้)

เหมาะสำหรับการทดสอบที่อยู่เคียงข้างคุณ

Object.prototype.toSource()

//Usage:
obj.toSource();

0

ใช้ฟังก์ชัน stringify

var j = {
"name":"binchen"
};

var j_json = JSON.stringify(j);

console.log("j in json object format :", j_json);

การเข้ารหัสมีความสุข !!!




-24

หากคุณมีสตริง json และมันไม่ได้ห่อด้วย [] ให้ตัดมันก่อน

var str = '{"city": "Tampa", "state": "Florida"}, {"city": "Charlotte", "state": "North Carolina"}';
str = '[' + str + ']';
var jsonobj = $.parseJSON(str);

หรือ

var jsonobj = eval('(' + str + ')');
console.log(jsonobj);

OP กำลังพยายามไปทางอื่น คำถามของคุณตอบกลับกรณีที่เขามีสตริง JSON และต้องการให้เป็นวัตถุ
Joshua Snider

1
คุณได้ทำสิ่งที่ย้อนกลับไปที่คำถาม .. คุณควรใช้ JSON.stringfy () ฟังก์ชัน
Hardik Patel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.