วิธีสร้างสตริง JSON ใน JavaScript


97
window.onload = function(){
    var obj = '{
            "name" : "Raj",
            "age"  : 32,
            "married" : false
            }';

    var val = eval('(' + obj + ')');
    alert( "name : " + val.name + "\n" +
           "age  : " + val.age  + "\n" +
           "married : " + val.married );

}

ในโค้ดบางอย่างเช่นนี้ฉันพยายามสร้างสตริง JSON เพื่อเล่น มันเป็นการโยนความผิดพลาด แต่ถ้าฉันใส่ชื่ออายุแต่งงานทั้งหมดในบรรทัดเดียว (บรรทัดที่ 2) มันก็ไม่ได้ มีปัญหาอะไร?


2
ดูคำตอบนี้stackoverflow.com/questions/3904269/…
powtac

คำตอบ:


85

Javascript ไม่จัดการ Strings ในหลายบรรทัด

คุณจะต้องเชื่อมต่อสิ่งเหล่านี้:

var obj = '{'
       +'"name" : "Raj",'
       +'"age"  : 32,'
       +'"married" : false'
       +'}';

คุณยังสามารถใช้ template literals ใน ES6 ขึ้นไป: ( ดูเอกสารประกอบที่นี่ )

var obj = `{
           "name" : "Raj",
           "age" : 32,
           "married" : false,
           }`;

13
หรือใส่ \ ท้ายแต่ละบรรทัดในลิเทอรัล
Phrogz

3
สำหรับสตริงแบบหลายบรรทัดแทนที่จะใช้เครื่องหมายคำพูดเดี่ยวหรือคู่คุณสามารถใช้ "(อักขระขีดหลังทางด้านซ้ายของคีย์ # 1) สิ่งเหล่านี้เรียกว่า 'template literals'
สีน้ำเงิน

5
แน่นอน: อย่าตัดสินคำตอบนี้และมองไปที่คนอื่น ๆ
AsTeR

1
ตัวอักษรเทมเพลตคือ ECMA Script 2015 Standard คำถามและคำตอบนี้มาจากปี 2012 แล้ว แต่ฉันจะแก้ไขใน :)
bardiir

จริงๆ? การต่อสตริงตั้งแต่เริ่มต้นเป็นวิธีที่ดีที่สุดในการสร้าง JSON? ฉันคิดว่าคำตอบอื่นควรเป็นคำตอบที่ยอมรับได้
rory.ap

270

วิธีที่ฉันทำคือ:

   var obj = new Object();
   obj.name = "Raj";
   obj.age  = 32;
   obj.married = false;
   var jsonString= JSON.stringify(obj);

ฉันเดาว่าวิธีนี้สามารถลดโอกาสที่จะเกิดข้อผิดพลาด


โค้ดจะเป็นอย่างไรหากคุณต้องการให้ข้อมูลเชิงลึกกับต้นไม้ ชอบชื่อฉันอยากจะให้ name.firstname และ name.lastname ฉันต้องกำหนดชื่อเป็น var หรือไม่?
Amir

62

ฟังก์ชัน JSON.stringify จะเปลี่ยนวัตถุ json ของคุณให้เป็นสตริง:

var jsonAsString = JSON.stringify(obj);

ในกรณีที่เบราว์เซอร์ไม่ได้ใช้งาน (IE6 / IE7) ให้ใช้สคริปต์JSON2.js ปลอดภัยเนื่องจากใช้การใช้งานแบบเนทีฟหากมีอยู่


23

สิ่งนี้ค่อนข้างง่ายและเรียบง่าย

var obj = new Object();
obj.name = "Raj";
obj.age = 32;
obj.married = false;

//convert object to json string
var string = JSON.stringify(obj);

//convert string to Json Object
console.log(JSON.parse(string)); // this is your requirement.

15

ใช้JSON.stringify:

> JSON.stringify({ asd: 'bla' });
'{"asd":"bla"}'

ดูjson2.js ด้วยหากคุณต้องการรองรับเบราว์เซอร์รุ่นเก่า
ดักลาส

ใช่นี่คือลิงค์ไปยังรายการโครงการ GitHub ของเขา: github.com/douglascrockford
Douglas

@nepsdotin Douglas ที่ SO ไม่ใช่ Douglas Crockford "ถึงGitHub ของเขา "
TimWolla

อ่าพลาดไปไม่ฉันไม่ใช่คร็อกฟอร์ด!
ดักลาส

6

ฉันคิดว่าวิธีนี้ช่วยคุณได้ ...

var name=[];
var age=[];
name.push('sulfikar');
age.push('24');
var ent={};
for(var i=0;i<name.length;i++)
{
ent.name=name[i];
ent.age=age[i];
}
JSON.Stringify(ent);

-6

สตริง json ไม่สามารถมีตัวแบ่งบรรทัดได้ คุณต้องทำให้มันเป็นบรรทัดเดียว: {"key":"val","key2":"val2",etc....}.

แต่อย่าสร้างสตริง JSON ด้วยตัวคุณเอง มีมากมายของห้องสมุดที่ทำเพื่อคุณที่ใหญ่ที่สุดซึ่งเป็นเป็นjQuery


8
JSON สามารถมีตัวแบ่งบรรทัดได้ แต่ไวยากรณ์ของสตริง JavaScript ไม่สามารถทำได้

ภายในสตริงใช่ แต่ไม่ใช่ระหว่างคู่คีย์ / ค่า
Marc B

1
ฉันคิดว่าคุณกำลังสับสนไวยากรณ์สตริงสตริง JavaScript ซึ่งไม่มีอักขระขึ้นบรรทัดใหม่ที่ไม่ใช้ Escape และมาร์กอัป JSON มาร์กอัป JSON สามารถมีตัวแบ่งบรรทัดได้อย่างแน่นอน

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