Câu hỏi Nối tiếp thành JSON trong jQuery [trùng lặp]


Câu hỏi này đã có câu trả lời ở đây:

Tôi cần serialize một đối tượng vào JSON. Tôi đang sử dụng jQuery. Có cách nào "chuẩn" để làm điều này không?

Tình hình cụ thể của tôi: Tôi có một mảng được định nghĩa như hình dưới đây:

var countries = new Array();
countries[0] = 'ga';
countries[1] = 'cd';
...

và tôi cần biến chuỗi này thành chuỗi để chuyển đến $.ajax() như thế này:

$.ajax({
    type: "POST",
    url: "Concessions.aspx/GetConcessions",
    data: "{'countries':['ga','cd']}",
...

1143
2017-10-10 15:29


gốc


không ai chỉ ra rằng countries là tên của một biến, không phải là một khóa ... thông tin đó sẽ bị mất khi bạn cố gắng tuần tự hóa nó. - mpen
Yeah .. cần phải là JSON.stringify ({countries: countries}) - Bodman
angular.js có: angular.fromJson và angular.toJson ... vì vậy nếu bạn đã sử dụng góc cạnh, thì điều đó thật tuyệt vời - CommaToast
stackoverflow.com/questions/38408348/… - Suraj Roy


Các câu trả lời:


JSON-js - JSON bằng JavaScript.

Để chuyển đổi một đối tượng thành chuỗi, hãy sử dụng JSON.stringify:

var json_text = JSON.stringify(your_object, null, 2);

Để chuyển đổi một chuỗi JSON thành đối tượng, hãy sử dụng JSON.parse:

var your_object = JSON.parse(json_text);

Nó gần đây đã được đề xuất bởi John Resig:

... XIN bắt đầu di chuyển   các ứng dụng sử dụng JSON của bạn qua   Jrock2.js của Crockford. Nó hoàn toàn   tương thích với ECMAScript 5   đặc điểm kỹ thuật và giảm xuống một cách duyên dáng   nếu triển khai bản địa (nhanh hơn!)   tồn tại.

Trong thực tế, tôi vừa hạ cánh một sự thay đổi trong jQuery ngày hôm qua mà sử dụng   Phương thức JSON.parse nếu nó tồn tại, bây giờ   rằng nó đã được xác định hoàn toàn.

Tôi có xu hướng tin tưởng những gì anh ta nói về các vấn đề JavaScript :)

Trình duyệt mới hơn hỗ trợ cái Đối tượng JSON nguyên bản. Phiên bản hiện tại của thư viện JSON của Crockford sẽ chỉ định nghĩa JSON.stringify và JSON.parse nếu chúng chưa được xác định, hãy để nguyên bất kỳ hoạt động gốc nào của trình duyệt.


1092
2018-05-26 19:22



Điểm tốt @ Mark0978. Chỉ cần bằng cách giải thích, các đối số cho JSON.stringify được giải thích đây. Tôi đã không nhìn thấy một usecase tốt cho tham số thứ hai được nêu ra, nhưng tham số cuối cùng là khá hữu ích: nó cho biết có bao nhiêu không gian để sử dụng để thụt lề với khi định dạng chuỗi JSON.
Kiểm tra các vấn đề trước khi sử dụng giải pháp này: [github.com/douglascrockford/JSON-js/pull/13] Có thể an toàn hơn là tinh chỉnh mã này tạo ra một số đối tượng JSON2 và sử dụng nó bất kể hỗ trợ JSON trong trình duyệt. - xmedeko
@pat, the 2nd, "replacer" arg là rất hữu ích cho serialization tùy chỉnh của các đối tượng được biết đến. Ví dụ, tôi đang tuần tự hóa các phần tử SVG bằng cách sử dụng: JSON.stringify(obj, function(key, val) { if (val instanceof SVGSVGElement) {return val.xml || new XMLSerializer().serializeToString(val);} return val;}) - Courtney Christensen
Mã của Crockford đã không được chơi tốt đẹp với một số bộ chọn jQuery phức tạp hơn. Khi tôi nhận xét ra các sửa đổi Object.prototype ở dưới cùng của tập tin, nó làm việc như mong đợi. - Chris
Tôi thực sự thích JSON3 hơn. Nó có hỗ trợ AMD / requireJS cộng với nó không sử dụng eval mà Crockform mình đã đề cập là "ác". github.com/bestiejs/json3 - ShitalShah


Tôi đã sử dụng jquery-json trong 6 tháng và nó hoạt động rất tốt. Nó rất đơn giản để sử dụng:

var myObj = {foo: "bar", "baz": "wockaflockafliz"};
$.toJSON(myObj);

// Result: {"foo":"bar","baz":"wockaflockafliz"}

181
2018-06-01 21:40



1 Nếu bạn đã sử dụng jQuery, đây là cách để đi. JSON-js tuyệt vời như một thư viện độc lập nhưng plugin này tích hợp liền mạch JSON.stringify và JSON.parse với jQuery. Đó là một chiến thắng-thắng. IMHO, đây phải là câu trả lời được chấp nhận. - Evan Plaice
@EvanPlaice - Những gì bạn có nghĩa là 'seammless tích hợp'. Tôi thu được gì khi sử dụng jquery-json qua JSON-js? - ripper234
@ ripper234 Tôi có nghĩa là nó sử dụng các phương thức JSON.stringify / JSON.parse nguyên gốc nếu chúng có sẵn, nếu không nó sẽ quay trở lại thực hiện riêng của nó. Về cơ bản, nó là một polyfill cho JSON serialization. Lợi ích là bạn nhận được tuần tự hóa JSON phía máy khách cho dù trình duyệt của người dùng của bạn có hỗ trợ nó nguyên bản hay không. - Evan Plaice
Tôi đã tìm kiếm một thay thế JSON.stringify IE6 và đây là người duy nhất làm việc cho đến nay. Ý tôi là, bao gồm cả json.js tự hoạt động tốt nhưng làm cho các xung đột với không gian tên jQuery "$". - matewka
@EvanPlaice, jquery-json không phải là một polyfill. Nó là một thư viện sử dụng chức năng gốc nếu có. Thay vào đó, JSON-js (json2.js đặc biệt) là một polyfill bởi vì nó cung cấp cùng một đối tượng JSON và các trình duyệt API cung cấp, nhưng không clobber chức năng gốc (có nghĩa là các trình duyệt hiện đại vẫn nhận được bản thực thi gốc có hiệu năng cao). - Matthew Flaschen


Hoạt động trên IE8 +

Không cần jQuery, sử dụng:

JSON.stringify(countries); 

92
2017-08-29 06:57



-1 Sẽ không hoạt động trong các trình duyệt cũ hơn mà thiếu tuần tự hóa JSON gốc. - Cory House
@Cory - Chỉ cần bao gồm các JSON-js đưa tay đến bản thực thi gốc nếu tìm thấy - James Westgate
Yup, James đồng ý. Tôi sử dụng như vậy. -1 là vì không có cảnh báo trong câu trả lời này mà bạn phải sử dụng thư viện để nhận hỗ trợ cho các trình duyệt cũ hơn. - Cory House
Ai quan tâm đến IE <8? Tôi không. Nếu tôi có cách của tôi, tôi thậm chí sẽ không lập trình một chút Javascript cho bất kỳ phiên bản nào của nó. - Thomas Eding
@ Izkata: Tôi biết. Tôi chỉ thích bashing nó cho vui. Đối với các dự án cá nhân tôi sẽ không bận tâm. Nhưng đối với công việc thực tế, tôi sẽ làm bất cứ điều gì ông chủ của tôi muốn tôi làm. - Thomas Eding


Tôi đã không sử dụng nó nhưng bạn có thể muốn thử Plugin jQuery được viết bởi Mark Gibson 

Nó bổ sung thêm hai chức năng: $.toJSON(value), $.parseJSON(json_str, [safe]).


43
2017-10-10 15:35



Trong jQuery, hầu hết các công cụ tốt đều có dạng plugin. Bằng cách tránh các plugin, bạn sẽ viết lại rất nhiều nội dung đã được viết. - Tahir Akhtar
Lưu ý rằng $.parseJSON hiện đang ở trong lõi jQuery. - Marnen Laibow-Koser


Không, cách tiêu chuẩn để tuần tự hóa thành JSON là sử dụng thư viện tuần tự hóa JSON hiện có. Nếu bạn không muốn làm điều này, thì bạn sẽ phải viết các phương thức tuần tự hóa của riêng bạn.

Nếu bạn muốn hướng dẫn về cách thực hiện việc này, tôi khuyên bạn nên kiểm tra nguồn của một số thư viện có sẵn.

CHỈNH SỬA: Tôi sẽ không đi ra ngoài và nói rằng viết các phương pháp serliazation của riêng bạn là xấu, nhưng bạn phải xem xét rằng nếu điều quan trọng đối với ứng dụng của bạn là sử dụng JSON được định dạng tốt thì bạn phải cân nhắc chi phí của "một phụ thuộc nhiều hơn" chống lại khả năng rằng các phương pháp tùy chỉnh của bạn có thể một ngày nào đó gặp phải trường hợp lỗi mà bạn không lường trước được. Cho dù rủi ro đó là chấp nhận được là cuộc gọi của bạn.


34
2017-10-10 15:47



Viết phương pháp tuần tự hóa JSON của riêng bạn là xấu. Ở đó, tôi đã nói. :-) - Ryan Duffield
Làm bất cứ điều gì mà người khác đã làm là xấu. Hầu hết chúng ta được trả tiền để hoàn thành công việc, chứ không phải tái tạo bánh xe. - jmort253
Tôi sẽ phải đồng ý với @Adam trên cái này. Anh ấy không ủng hộ việc tự mình lăn, nhưng gợi ý rằng bạn suy nghĩ về những điều phụ thuộc bạn thực hiện trước khi chấp nhận nó và "hoàn thành công việc". Bất cứ lúc nào bạn có một sự phụ thuộc bạn đang dựa vào một bên thứ ba không được cam kết không được cam kết mà không thực sự quan tâm đến dự án của bạn. Một số thư viện được tài liệu tốt, được hỗ trợ tốt với một cộng đồng khỏe mạnh xung quanh và thường có thể an toàn để sử dụng. Nhưng đó là sự quan tâm của bạn và khách hàng của bạn để thực sự biết điều này trước thời hạn. - Paul Alexander


Tôi đã tìm thấy điều này ở đâu đó. Không thể nhớ nơi mặc dù ... có lẽ trên StackOverflow :)

$.fn.serializeObject = function(){
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name]) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

26
2018-01-02 07:57



Bạn tìm thấy nó ở đây: stackoverflow.com/questions/1184624/… - Marcello Nuccio
Điều này không thực sự tuần tự hóa đối tượng thành chuỗi JSON. - Jay Taylor
@pyrony - Bạn có thể xây dựng? Cảm ơn. - jmort253
@pyrony - Truy cập biểu mẫu web trên trang web, tải mã Jquery trong FB Console và sau đó chạy: var data = "" + $.toJSON($('form').serializeObject());. dữ liệu bây giờ là một chuỗi JSON. Sau đó, chạy lệnh này: alert(typeof data); Nó sẽ cảnh báo "chuỗi". Sau đó chạy lệnh này: alert(data);, bạn sẽ thấy văn bản JSON. Cuối cùng, đi đến jsonlint.com và dán vào chuỗi JSON. Nó phải xác nhận là Valid JSON. Tôi không chắc rằng tôi hiểu ý của bạn là mọi thứ dường như chỉ ra việc tạo JSON hợp lệ này. Cảm ơn một lần nữa. - jmort253
@ rubo77 - Tôi không nhớ chính xác tại sao tôi lại sử dụng jquery-json. Điều này đã được đăng hơn 2-3 / 4 năm trước, và tôi nghĩ rằng vẫn còn rất hay để thử và hỗ trợ IE7 và IE6, không có trình phân tích cú pháp JSON được tích hợp sẵn. Bạn thực sự có thể thay thế $.toJSON với JSON.stringify và nhận được kết quả tương tự mà không có phụ thuộc bên ngoài, giả sử bạn chỉ hỗ trợ các trình duyệt hiện đại. Hi vọng điêu nay co ich! :) - jmort253


Nếu bạn không muốn sử dụng các thư viện bên ngoài thì .toSource() phương pháp JavaScript gốc, nhưng nó không hoàn toàn là trình duyệt chéo.


10
2017-12-01 21:44