jquery json thành chuỗi?


79

Thay vì đi từ một chuỗi json và sử dụng $ .parseJSON, tôi cần lấy đối tượng của mình và lưu trữ nó trong một biến dưới dạng chuỗi đại diện cho json.

(Một thư viện mà tôi đang xử lý mong đợi một loại json không đúng định dạng, vì vậy tôi cần phải xử lý nó để làm cho nó hoạt động.)

Cách tốt nhất để làm điều này là gì?


1
bản sao có thể có của Serializing thành JSON trong jQuery
Wolph

Thư viện nào mong đợi một chuỗi JSON không đúng định dạng? : /
Marcel Korpel

Thư viện mã hóa JavaScript Stanford kết xuất và phân tích cú pháp JSON không đúng định dạng, lỗi được mang lại đã được xử lý vào lúc này.
Incognito

Câu trả lời:


84

Chỉnh sửa: Bạn nên sử dụng thư viện json2.js từ Douglas Crockford thay vì triển khai mã bên dưới. Nó cung cấp một số tính năng bổ sung và hỗ trợ trình duyệt tốt hơn / cũ hơn.

Lấy tệp json2.js từ: https://github.com/douglascrockford/JSON-js


// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
    var t = typeof (obj);
    if (t != "object" || obj === null) {
        // simple data type
        if (t == "string") obj = '"'+obj+'"';
        return String(obj);
    }
    else {
        // recurse array or object
        var n, v, json = [], arr = (obj && obj.constructor == Array);
        for (n in obj) {
            v = obj[n]; t = typeof(v);
            if (t == "string") v = '"'+v+'"';
            else if (t == "object" && v !== null) v = JSON.stringify(v);
            json.push((arr ? "" : '"' + n + '":') + String(v));
        }
        return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
    }
};

var tmp = {one: 1, two: "2"};
JSON.stringify(tmp); // '{"one":1,"two":"2"}'

Mã từ: http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/


23
Tôi muốn giới thiệu thư viện json2.js thay vì hàm này, vì nó không xử lý chính xác một số kiểu, như thuộc tính chứa undefined, hàm, (không phải là giá trị JSON hợp lệ), đối tượng Boolean (ví dụ new Boolean(true);) hoặc NaNcần được thay thế với null, vv ... nó cũng không hỗ trợ các đối số tùy chọn bổ sung, replacerhàm và spacessố cho thụt lề, được mô tả đầy đủ trong tiêu chuẩn.
Christian C. Salvadó

3
tôi nghĩ có lẽ liên kết json2 phải là: github.com/douglascrockford/JSON-js/blob/master/json2.js
fishwebdev.

5
Ngày nay, hầu hết các trình duyệt đều có đối tượng JSON gốc, bao gồm các phương thức phân tích cú pháp và chuỗi ký tự. Vì vậy, chỉ cần thử JSON.stringify({})và xem nếu bạn nhận được "{}"mà không cần bao gồm mã trên. Bạn thậm chí có thể chuyển các tham số để lọc ra các phím hoặc để thực hiện việc in ấn đẹp, ví dụ như JSON.stringify({a:1,b:2}, null, 2)đặt một dòng mới và 2 khoảng trắng trước mỗi phím.
AlexChaffee

Đối với những người đang tìm kiếm câu trả lời hiện đại: JSON.stringify (); được thực hiện trong tất cả các trình duyệt (máy tính để bàn và di động): developer.mozilla.org/en/docs/Web/JavaScript/Reference/...
Pablo Martinez

38

tôi sử dụng

$.param(jsonObj)

mà tôi có được chuỗi.


8
Nhưng điều này không tạo ra JSON (và đó là câu hỏi).
Felix Kling

22
nhưng mã này ít được thực hiện tất cả các tiêu đề của yêu cầu câu hỏi: P
nils petersohn

35

Ngày nay, hầu hết các trình duyệt đều có một JSONđối tượng gốc , bao gồm parsestringifycác phương thức. Vì vậy, chỉ cần thử JSON.stringify({})và xem nếu bạn nhận được "{}". Bạn thậm chí có thể chuyển các tham số để lọc ra các phím hoặc để thực hiện in ấn đẹp, ví dụ: JSON.stringify({a:1,b:2}, null, 2)đặt một dòng mới và 2 khoảng trắng trước mỗi phím.

JSON.stringify({a:1,b:2}, null, 2)

cho

"{\n  \"a\": 1,\n  \"b\": 2\n}"

cái nào in như

{
  "a": 1,
  "b": 2
}

Đối với phần lộn xộn xung quanh câu hỏi của bạn, hãy sử dụng tham số thứ hai. Từ http://www.javascriptkit.com/jsref/json.shtml :

Tham số thay thế có thể là một hàm hoặc một mảng Chuỗi / Số. Nó đi qua từng thành viên trong đối tượng JSON để cho phép bạn quyết định giá trị của từng thành viên sẽ được thay đổi. Là một hàm, nó có thể trả về:

  • Một số, chuỗi hoặc Boolean, thay thế giá trị ban đầu của thuộc tính bằng giá trị được trả về.
  • Một đối tượng, được tuần tự hóa sau đó được trả về. Các phương thức hoặc hàm đối tượng không được phép và thay vào đó sẽ bị xóa.
  • Null, khiến thuộc tính bị xóa.

Là một mảng, các giá trị được xác định bên trong nó tương ứng với tên của các thuộc tính bên trong đối tượng JSON sẽ được giữ lại khi chuyển đổi thành đối tượng JSON.


10

Cách tốt nhất tôi đã tìm thấy là sử dụng jQuery JSON


1
vì nó là một jquery Plugin & không trực tiếp những gì đang được cung cấp bởi jquery
Rajat Gupta

@ user01 nhưng jquery không bao gồm một cách để làm điều này (ít nhất là nó không khi tôi viết bài trả lời này, không chắc chắn nếu nó bây giờ)
David Reynolds

@DavidReynolds: yes tất nhiên, tôi hiểu :) Tôi không có ý định bất kỳ hành vi phạm tội đối với bạn nhưng chỉ nhận xét về vấn đề này như một giải pháp cho vấn đề :)
Rajat Gupta

0

Bạn có thể phân tích cú pháp JSON thành một đối tượng, sau đó tạo JSON không đúng định dạng của bạn từ đối tượng ajavscript. Đây có thể không phải là hiệu suất tốt nhất, tho.

Ngược lại, nếu bạn chỉ cần thực hiện những thay đổi rất nhỏ đối với chuỗi, chỉ cần coi nó như một chuỗi và xử lý nó bằng cách sử dụng javascript chuẩn.

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.