Làm thế nào để tạo chuỗi JSON trong JavaScript?


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

}

Trong một đoạn mã như thế này, tôi đang cố gắng tạo chuỗi JSON chỉ để chơi xung quanh. Đó là lỗi ném, nhưng nếu tôi đặt tất cả tên, tuổi, kết hôn vào một dòng duy nhất (dòng 2) thì không. Vấn đề là gì?


2
Xem câu trả lời này stackoverflow.com/questions/3904269/…
powtac

Câu trả lời:


85

Javascript không xử lý các Chuỗi trên nhiều dòng.

Bạn sẽ cần nối những cái:

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

Bạn cũng có thể sử dụng các ký tự mẫu trong ES6 trở lên: ( Xem tại đây để biết tài liệu )

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

13
Hoặc đặt dấu \ ở cuối mỗi dòng theo nghĩa đen.
Phrogz

3
Đối với chuỗi nhiều dòng, thay vì dấu nháy đơn hoặc dấu ngoặc kép, bạn có thể sử dụng `(ký tự đánh dấu lùi. Ở bên trái phím # 1). Chúng được gọi là 'chữ mẫu'.
Blue

5
Chắc chắn: không giải quyết cho câu trả lời này và nhìn vào những người khác.
AsTeR

Các ký tự của mẫu là Tiêu chuẩn ECMA Script 2015. Câu hỏi và câu trả lời này đã có từ năm 2012 rồi. Nhưng tôi sẽ chỉnh sửa nó trong :)
bardiir

Có thật không? Nối chuỗi từ đầu là cách tốt nhất để xây dựng JSON? Tôi nghĩ câu trả lời còn lại nên là câu trả lời được chấp nhận.
rory.ap

264

Cách tôi làm là:

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

Tôi đoán cách này có thể giảm cơ hội xảy ra lỗi.


62

Hàm JSON.stringify sẽ biến đối tượng json của bạn thành một chuỗi:

var jsonAsString = JSON.stringify(obj);

Trong trường hợp trình duyệt không triển khai nó (IE6 / IE7), hãy sử dụng tập lệnh JSON2.js . Nó an toàn vì nó sử dụng triển khai gốc nếu nó tồn tại.


23

Điều này có thể khá dễ dàng và đơn giản

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.

13

Sử dụng JSON.stringify:

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

Xem thêm json2.js nếu bạn cần hỗ trợ các trình duyệt cũ hơn.
Douglas

Có, đây là một liên kết đến danh sách dự án GitHub của anh ấy: github.com/douglascrockford
Douglas

@nepsdotin Douglas tại SO không phải là Douglas Crockford, "đến GitHub của anh ấy "
TimWolla

Aah, bỏ lỡ điều đó, không, tôi không phải Crockford!
Douglas

5

Tôi nghĩ cách này sẽ giúp bạn ...

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

-5

chuỗi json không được có ngắt dòng trong đó. Bạn sẽ phải làm cho nó tất cả dòng một: {"key":"val","key2":"val2",etc....}.

Nhưng đừng tự tạo chuỗi JSON. Có rất nhiều thư viện làm điều đó cho bạn, trong đó lớn nhất là jquery .


8
JSON có thể có ngắt dòng, nhưng cú pháp theo nghĩa đen của chuỗi JavaScript thì không.

nội bộ trong một chuỗi, vâng, nhưng không phải giữa các cặp khóa / giá trị.
Marc B

1
Tôi nghĩ rằng bạn đang nhầm lẫn cú pháp chuỗi ký tự JavaScript không thể chứa ký tự dòng mới không thoát và đánh dấu JSON. Đánh dấu JSON chắc chắn có thể chứa dấu ngắt dòng.

1
... dán mã trong câu hỏi của bạn vào jsonlint.com (tất nhiên là không có vv ....) . Sau khi nhấp vào Xác thực, bạn sẽ thấy rằng nó thực sự chèn các dòng mới khi nó in đẹp.
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.