Chuyển đổi đối tượng JS thành chuỗi JSON


1244

Nếu tôi đã định nghĩa một đối tượng trong JS với:

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

Làm cách nào để chuyển đổi đối tượng thành JSON? Chuỗi đầu ra phải là:

'{"name":"binchen"}'

63
JSON.stringify()là phương pháp bạn đang tìm kiếm.
Gowtham Gopalakrishnan

10
Luôn luôn có lần đầu tiên khi bạn phải học nó.
Sói Egan

Câu trả lời:


1922

Tất cả các trình duyệt hiện tại đều có hỗ trợ JSON gốc được tích hợp. Miễn là bạn không phải đối phó với các trình duyệt tiền sử như IE6 / 7, bạn có thể làm điều đó dễ dàng như vậy:

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


5
tải về kịch bản này để cho JSON.stringify(j);công việc
AabinGunz

2
Làm việc trên nodejs vì nút sử dụng cùng một công cụ
georgelviv

26
Câu trả lời này đã được đăng một năm trước khi IE9 được phát hành, vì vậy tại thời điểm viết IE8 thực sự là một trình duyệt hiện đại, hoặc ít nhất nó là IE mới nhất hiện có.
Andris

JSON.opesify không chuyển đổi các đối tượng lồng nhau. Bất kỳ giải pháp cho điều đó .. ??
Ritesh

9
Nếu bạn cần chuỗi json dễ đọc hơn Bạn có thể sử dụng tham số không gian nhưvar formattedJSON = JSON.stringify(j, null, 2);
Jacek Gzel

110

Được JSON.stringify()tìm thấy trong json2.js hoặc có nguồn gốc trong hầu hết các trình duyệt hiện đại.

   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
Để làm rõ hơn một chút: replacer tùy chọn, vì vậy nếu bạn muốn vẫn sử dụng spacearg bạn đặt nullcho replacer. Nếu bạn quan tâm đến việc sử dụng chức năng này để in ấn đẹp, tôi thấy câu trả lời này cũng hữu ích: stackoverflow.com/a/7220510/857209
Glenn Lawrence

34

Kiểm tra cách cập nhật / tốt hơn của Thomas Frank:

Cập nhật ngày 17 tháng 5 năm 2008: Công cụ khử trùng nhỏ được thêm vào phương thức toObject. Bây giờ toObject () sẽ không eval () chuỗi nếu nó tìm thấy bất kỳ mã độc hại nào trong đó. Để bảo mật hơn nữa: Đừng đặt cờ includeFifts thành true.

Douglas Crockford, cha đẻ của khái niệm JSON, đã viết một trong những chuỗi ký tự đầu tiên cho JavaScript. Sau này Steve Yen tại Trim Path đã viết một phiên bản cải tiến tốt đẹp mà tôi đã sử dụng một thời gian. Đó là những thay đổi của tôi đối với phiên bản của Steve mà tôi muốn chia sẻ với bạn. Về cơ bản, chúng xuất phát từ mong muốn của tôi để tạo ra bộ xâu chuỗi:

  • xử lý và khôi phục tài liệu tham khảo theo chu kỳ
  • bao gồm mã JavaScript cho các hàm / phương thức (dưới dạng tùy chọn)
  • loại trừ các thành viên đối tượng khỏi Object.prototype nếu cần.

23

Bạn có thể sử dụng phương thức JSON.opesify () để chuyển đổi đối tượng JSON thành Chuỗi.

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

Để xử lý ngược lại, bạn có thể sử dụng phương thức JSON.parse () để chuyển đổi Chuỗi JSON thành Đối tượng JSON.


Cảm ơn đã thêm quá trình ngược lại.
David Lavieri

12

Trong góc

angular.toJson(obj, pretty);

obj: Đầu vào được tuần tự hóa thành JSON.

khá (không bắt buộc):
Nếu được đặt thành true, đầu ra JSON sẽ chứa các dòng mới và khoảng trắng. Nếu được đặt thành một số nguyên, đầu ra JSON sẽ chứa nhiều khoảng trống trên mỗi lần thụt lề.

(mặc định: 2)


12

JSON.stringify(j, null, 4) sẽ cung cấp cho bạn JSON đẹp trong trường hợp bạn cũng cần làm đẹp

Tham số thứ hai là thay thế. Nó có thể được sử dụng như Bộ lọc trong đó bạn có thể lọc ra các giá trị chính nhất định khi xâu chuỗi. Nếu được đặt thành null, nó sẽ trả về tất cả các cặp giá trị khóa


10

Nếu bạn đang sử dụng AngularJS, bộ lọc 'json' sẽ làm điều đó:

<span>{{someObject | json}}</span>

9

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.

Việc chuyển đổi là một đối tượng thành chuỗi

JSON.parse biến một chuỗi văn bản JSON thành một đối tượng Javascript.

Việc chuyển đổi là một chuỗi thành đối tượng

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

để làm cho nó thành một chuỗi JSON sau đây có thể được sử dụng.

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

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

Để biết thêm thông tin bạn có thể tham khảo liên kết này dưới đây.

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


7

Một tùy chỉnh được xác định cho điều này, cho đến khi chúng ta làm lạ từ phương thức chuỗi hóa

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

ĐẦU RA

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

TRỰC TIẾP http://jsfiddle.net/mailmerohit5/y78zum6v/


không thoát khỏi chuỗi có dấu ngoặc kép như: "a \" trong chuỗi "
alphakevin

1
Mã tùy chỉnh đó là rất không đầy đủ. Không hỗ trợ mảng, đối tượng và ký tự đặc biệt. Ví dụ: json {"Array": ["1", "2", "3"], "obj": {"a": "b"}, "key \" với ký tự \ đặc biệt} ":" value "} sẽ xuất {" Array ":" 1,2,3 "," obj ":" [object Object] "," key "với \ Special} chars": "value"} là sai!
Manuel Romeiro

7

Tôi đã gặp vấn đề với việc xâu chuỗi hết bộ nhớ và các giải pháp khác dường như không hoạt động (ít nhất là tôi không thể làm cho chúng hoạt động được), đó là khi tôi vấp phải chủ đề này. Nhờ Rohit Kumar, tôi chỉ cần lặp qua đối tượng JSON rất lớn của mình để ngăn nó khỏi bị sập

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 sẽ cung cấp cho bạn chuỗi đại diện của bạn (giống như các lần khác được đề cập trong luồng này) ngoại trừ nếu bạn có một đối tượng lớn, điều này cũng sẽ hoạt động - chỉ cần đảm bảo bạn xây dựng nó để phù hợp với nhu cầu của bạn - Tôi cần nó có tên hơn mảng


5

Woking ... Dễ sử dụng

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

Cảm ơn


3

bạn có thể sử dụng hàm stringify như thế này

const j={ "name": "binchen" }

/** convert json to string */
const jsonString = JSON.stringify(j)

console.log(jsonString) // {"name":"binchen"}


3

Nếu bạn muốn nhận giá trị thuộc tính json ở định dạng chuỗi, hãy sử dụng cách sau

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

Để gỡ lỗi trong Node JS, bạn có thể sử dụng produc.inspect () . Nó hoạt động tốt hơn với các tài liệu tham khảo tròn.

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

3

Các thay thế JSON hiện có nơi quá nhiều cho tôi, vì vậy tôi đã viết hàm riêng của mình. Điều này có vẻ hiệu quả, nhưng tôi có thể đã bỏ lỡ một số trường hợp cạnh (điều đó không xảy ra trong dự án của tôi). Và có lẽ sẽ không hoạt động cho bất kỳ đối tượng tồn tại trước, chỉ cho dữ liệu tự tạo.

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: 

Cú pháp đơn giản để chuyển đổi một đối tượng thành một chuỗi là

JSON.stringify(value)

Cú pháp đầy đủ là: JSON.opesify (value [, replacer [, space]])

Chúng ta hãy xem một số ví dụ đơn giản. Lưu ý rằng toàn bộ chuỗi được trích dẫn kép và tất cả dữ liệu trong chuỗi được thoát nếu cần.

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
Sẽ thật tuyệt nếu bạn có thể cung cấp một lời giải thích ngắn về mã của bạn.
jonny

Điều này không cung cấp một câu trả lời cho câu hỏi. Một khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào ; thay vào đó, cung cấp câu trả lời không yêu cầu làm rõ từ người hỏi . - Từ đánh giá
Rafael

Tôi đã chỉnh sửa câu trả lời của mình, cảm ơn bạn rất nhiều vì đã chỉ ra @Rafael và @ jonny.
Rahul Choudhary

1

Chỉ sử dụng JSON.stringifyđể thực hiện chuyển đổi như vậy - tuy nhiên hãy nhớ rằng các trường có undefinedgiá trị sẽ không được đưa vào json

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

var s=JSON.stringify(j);

console.log(s);

Trường remember'biến mất' từ đầu ra json


Bạn vừa cứu ngày của tôi. Tôi đã không thể cứu đối tượng của mình. khóa mà các trường có giá trị không xác định sẽ không được đưa vào json đã giải quyết vấn đề của tôi!
Mohammad Ghonchesefidi

0

Bạn có thể sử dụng phương thức JSON.opesify () để chuyển đổi đối tượng JSON thành Chuỗi.

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

Để chuyển đổi chuỗi này trở lại đối tượng json, bạn có thể sử dụng phương thức JSON.parse ().


0

sử dụng JSON.stringify(param1, param2, param3);

Những gì là: -

param1 -> giá trị để chuyển đổi sang JSON

param2 -> chức năng xâu chuỗi theo cách riêng của bạn. Ngoài ra, nó phục vụ như một danh sách trắng mà các đối tượng cần được đưa vào JSON cuối cùng.

param3 -> Một kiểu dữ liệu Số cho biết số lượng khoảng trắng cần thêm. Tối đa được phép là 10.


0

chuyển đổi str => obj

const onePlusStr = '[{"brand": "oneplus"}, {"model": "7T"}]';

const onePLusObj = JSON.parse (onePlusStr);

chuyển đổi obj => str

const onePLusObjToStr = JSON.opesify (onePlusStr);

Tài liệu tham khảo về phân tích cú pháp JSON trong JS:
JSON.parse (): nhấp
JSON.opesify (): nhấp


bạn có thể cung cấp thêm thông tin không? Tài liệu tham khảo vv
Nodejs-nerd

Tài liệu tham khảo về phân tích cú pháp JSON trong JS: JSON.parse (): w3schools.com/js/js_json_parse.asp JSON.opesify (): w3schools.com/js/js_json_opesify.asp
yash

cảm ơn, bạn có thể chỉnh sửa câu trả lời của mình để đưa vào câu hỏi này không
Nodejs-nerd

0

Phương pháp rất dễ sử dụng, nhưng không sử dụng nó trong bản phát hành (vì có thể có vấn đề tương thích).

Tuyệt vời để thử nghiệm về phía bạn.

Object.prototype.toSource()

//Usage:
obj.toSource();

0

Sử dụng hàm Stringify

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

var j_json = JSON.stringify(j);

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

Chúc mừng mã hóa !!!


0
//use JSON.stringify({})

const stringified = JSON.opesify ({}) // truyền đối tượng bạn muốn chuyển đổi ở định dạng chuỗi


-1

Dùng cái này,

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

-24

nếu bạn có chuỗi json và nó không được bọc bằng [] thì hãy quấn nó trước

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

HOẶC LÀ

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

OP đang cố gắng đi theo con đường khác. Câu hỏi của bạn trả lời trường hợp ngược lại khi anh ta có một chuỗi JSON và muốn lấy nó làm đối tượng.
Joshua Snider

1
bạn đã thực hiện điều ngược lại với câu hỏi .. bạn nên sử dụng hàm JSON.opesfy ()
Hardik Patel
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.