Tại sao Javascript sử dụng JSON.opesify thay vì JSON.serialize?


18

Tôi chỉ đang tự hỏi về "chuỗi""nối tiếp" . Đối với tôi chúng là những điều tương tự (mặc dù tôi có thể sai), nhưng theo kinh nghiệm trước đây của tôi (chủ yếu là với ) tôi sử dụng Serialize()và không bao giờ sử dụng Stringify().

Tôi biết tôi có thể tạo một bí danh đơn giản trong Javascript,

// either
JSON.serialize = function(input) {
    return JSON.stringify(input);
};

// or
JSON.serialize = JSON.stringify;

http://jsfiddle.net/HKKUb/

nhưng tôi chỉ tự hỏi về sự khác biệt giữa hai và tại sao chuỗi được chọn.


với mục đích so sánh, đây là cách bạn tuần tự hóa XML thành Chuỗi trong C #

public static string SerializeObject<T>(this T toSerialize)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
    StringWriter textWriter = new StringWriter();

    xmlSerializer.Serialize(textWriter, toSerialize);
    return textWriter.ToString();
}

7
Trên thực tế, bạn không thể làm gì JSON.serialize = JSON.stringify?
Daniel DiPaolo

tại sao có bạn có thể
Đuổi theo Florell

1
Tôi cho rằng sau khi đọc lại câu hỏi của mình, tôi thấy rằng trong ví dụ C # của mình, tôi đang tuần tự hóa XML và THEN chuyển đổi đối tượng được tuần tự hóa ToString();. Có inlies chà.
Chase Florell

Tôi đoán sự liên tục, sẽ tốt hơn (đối với tôi) khi có một phương pháp giống như thế này ... JSON.serialize(obj).toString();hoặc jsonObject().toString();... theo cách này nó sẽ trông giống như C # của tôi ... nhưng bây giờ tôi đã quá phức tạp hóa nó.
Chase Florell

Câu trả lời:


12

Hãy xem xét kỹ hơn hai ý kiến ​​bạn đặt ra cho câu hỏi:

Tôi cho rằng sau khi đọc lại câu hỏi của mình, tôi thấy rằng trong ví dụ C # của mình, tôi đang tuần tự hóa XML và THEN chuyển đổi đối tượng được tuần tự hóa ToString ();. Có inlies chà.

Tôi đoán sự liên tục, sẽ tốt hơn (đối với tôi) khi có một phương thức giống như thế này ... JSON.serialize (obj) .toString (); hoặc jsonObject (). toString (); ... theo cách này nó sẽ trông giống như C # của tôi ... nhưng bây giờ tôi đã quá phức tạp hóa nó.

Bây giờ hãy nhớ rằng trong Javascript, một đối tượng là hàm băm (thay vào đó, nếu sử dụng Prototype hoặc khung khác, nó phải đủ điều kiện là "loại băm đặc biệt" - nhưng dạng đơn giản hoạt động cho ví dụ này):

var obj = {
   foo: 1,
   bar: function() { console.log(this.foo); }
}
obj.foo; // 1
obj.bar; // function reference
obj.bar(); // function call
obj['foo']; // 1
obj['bar']; // function reference
obj['bar'](); // function call

Lý do duy nhất serialize()có thể cần thiết trong Javascript là cắt bỏ các chức năng, tham chiếu đến các đối tượng khác, v.v.

Vì vậy, để quay lại ví dụ C # của bạn - chúng tôi chỉ cần cắt bỏ .Serialize()là không cần thiết. Một đối tượng là một hàm băm, nó đã được tuần tự hóa, việc "tuần tự hóa" hơn nữa sẽ phải được thực hiện thủ công trong mã của riêng bạn. Tất cả những gì để lại cho bạn là .ToString().

Liệu .stringify()có ý nghĩa hơn bây giờ?


vâng, xâu chuỗi có ý nghĩa, tuy nhiên tôi vẫn muốn sử dụng.toString()
Chase Florell

7
toString có thể có nghĩa là bất cứ điều gì. JSON.opesify rõ ràng là JSON.
Brandon

11

Điều này là do ký hiệu JSON được chỉ định vào năm 1999 không phải sau năm 2002 ( asp.netđược phát hành vào năm đó). Vì vậy, tôi đoán họ đã không biết về serialize.

Cười đùa,

Nghe từ này serialization, điều đầu tiên tôi nghĩ đến giống như chuyển đổi dữ liệu thành byte, ở đây JSON.opesify có ý nghĩa hoàn hảo khi nó chuyển đổi đối tượng thành biểu diễn chuỗi chứ không phải biểu diễn byte.

Tái bút

@Chase Florell, bạn không thể chỉ thêm JSON.serialize, vì trong chế độ nghiêm ngặt, mã này thực sự có thể bị lỗi trong một số trình duyệt.

như JSONkhông phải là đối tượng trung bình của bạn.


Tôi đoán theo kinh nghiệm (có giới hạn) của tôi, việc tuần tự hóa một thứ gì đó luôn được chuyển đổi thành dạng chuỗi để lưu trữ tệp phẳng. Tôi hiểu những gì bạn đang nói.
Đuổi theo Florell

Tôi nghĩ đó là năm 2001 .. xem wikipedia . Cái tên có lẽ là một sở thích cá nhân của Douglas Crockford. 1999 là năm tiêu chuẩn ECMA thứ 3 ra đời, trên đó JSON được thành lập.
Martijn Pieters

1
@ChaseFlorell tuần tự hóa chỉ theo nghĩa đen là biến một đối tượng trong bộ nhớ thành định dạng dữ liệu liền kề nhau để nó có thể được chứa nguyên tử, tôi tin rằng một phương pháp phổ biến hơn để thực hiện sẽ là biểu diễn tạm thời, để gửi qua mạng hoặc khác.
Jimmy Hoffa

@avinashr, re: ps của bạn : chỉnh sửa ... fiddle này dường như không thất bại. bạn có thể giải thích làm thế nào " JSONkhông phải là đối tượng trung bình của bạn"? Tôi không cáu kỉnh, chỉ không rõ ý của bạn là gì.
Đuổi theo Florell

2
@ChaseFlorell là chính xác - liên quan đến Javascript, JSON là tập hợp con của các đối tượng Javascript hợp lệ. Xem câu trả lời của tôi để biết ví dụ đơn giản: Tất cả JSON hợp lệ là một đối tượng / hàm băm Javascript hợp lệ, nhưng không phải tất cả các đối tượng / băm Javascript đều là JSON hợp lệ. Ngay cả trong tên - JSON là viết tắt của "Ký hiệu đối tượng JavaScript".
Izkata
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.