Chuyển đổi mảng thành JSON


383

Tôi có một mảng var cars = [2,3,..]chứa một vài số nguyên. Tôi đã thêm một vài giá trị vào mảng, nhưng bây giờ tôi cần gửi mảng này đến một trang thông qua .getphương thức của jQuery . Làm cách nào tôi có thể chuyển đổi nó thành một đối tượng JSON để gửi?


Chỉ cần kiểm tra kỹ: mảng bạn muốn gửi đến trang có phải là mảng JavaScript hay là trên máy chủ?
Ian Oxley

đó là một mảng Javascript, tôi sẽ gửi nó tới một tập lệnh Python và Python sẽ sử dụng chuỗi JSON và làm việc với nó.
chấm

Câu trả lời:


657

Kịch bản cho tính tương thích ngược: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

Và gọi:

var myJsonString = JSON.stringify(yourArray);

Lưu ý: Đối tượng JSON hiện là một phần của hầu hết các trình duyệt web hiện đại (IE 8 trở lên). Xem caniuse để liệt kê đầy đủ. Tín dụng vào: @Spudley cho nhận xét của mình bên dưới


5
Điều này hoạt động, jQuery có một chức năng như thế này? Tôi không muốn đính kèm tệp js khác nếu jQuery đã có chức năng.
chấm

1
jQuery có triển khai JSON.parse trong 1.4.1, nhưng không phải JSON.opesify ... Nếu bạn nghĩ minifiy json2.js thì <3k tôi nghĩ vậy.
gnarf

6
Vâng, tôi đã ngạc nhiên khi jQuery không được tích hợp sẵn
JonoW

120
Đối với bất kỳ ai vẫn đọc câu trả lời này, điều đáng nói là tất cả các trình duyệt hiện đại đều bao gồm JSONđối tượng là tiêu chuẩn, điều đó có nghĩa là bạn không cần tập lệnh này trừ khi bạn có kế hoạch hỗ trợ các trình duyệt cũ hơn như IE7 hoặc Firefox 3.0. Xem CanIUse cho biểu đồ hỗ trợ.
Spudley

1
Thật đáng để chỉ ra rằng bạn có thể làm điều này trong bảng điều khiển trình duyệt: var a = [paste]; JSON.opesify (a)
Michael Cole

70

Tôi đã làm theo cách đó:

nếu tôi có:

var jsonArg1 = new Object();
    jsonArg1.name = 'calc this';
    jsonArg1.value = 3.1415;
var jsonArg2 = new Object();
    jsonArg2.name = 'calc this again';
    jsonArg2.value = 2.73;

var pluginArrayArg = new Array();
    pluginArrayArg.push(jsonArg1);
    pluginArrayArg.push(jsonArg2);

để chuyển đổi pluginArrayArg (là mảng javascript thuần) thành mảng JSON:

var jsonArray = JSON.parse(JSON.stringify(pluginArrayArg))

1
Bạn đã cứu mạng tôi
MD. Shafayatul Haque

44

Wow, có vẻ như ngày nay đã dễ dàng hơn nhiều ... 3 cách bạn có thể làm:

json = { ...array };

json = Object.assign({}, array);

json = array.reduce((json, value, key) => { json[key] = value; return json; }, {});

2
jsonString = JSON.stringify({ ...array })
Krishna Torque

11

Tôi quyết định sử dụng thư viện json2 và tôi đã gặp lỗi về cấu trúc dữ liệu theo chu kỳ.

Tôi đã giải quyết nó bằng cách nói với json2 cách chuyển đổi đối tượng phức tạp của tôi. Không chỉ nó hoạt động bây giờ mà tôi cũng chỉ bao gồm các lĩnh vực tôi cần. Đây là cách tôi đã làm nó:

OBJ.prototype.toJSON = function (key) {
       var returnObj = new Object();
       returnObj.devid = this.devid;
       returnObj.name = this.name;
       returnObj.speed = this.speed;
       returnObj.status = this.status;
       return returnObj;
   }

11

Hoặc thử xác định mảng là một đối tượng. (var Cars = {};) Sau đó, không cần phải chuyển đổi sang json. Điều này có thể không thực tế trong ví dụ của bạn nhưng làm việc tốt cho tôi.


4

Một cách khác có thể là thế này:

        var json_arr = {};
        json_arr["name1"] = "value1";
        json_arr["name2"] = "value2";
        json_arr["name3"] = "value3";

        var json_string = JSON.stringify(json_arr);

1

Nếu bạn chỉ có 1 đối tượng như đối tượng bạn yêu cầu, những điều sau đây sẽ hoạt động.

var x = [{'a':'b'}];
var b= JSON.stringify(x);
var c = b.substring(1,b.length-1);
JSON.parse(c); 


1

bởi vì mảng của tôi giống như bên dưới: và tôi đã sử dụng hàm .push để tạo nó một cách linh hoạt

my_array = ["234", "23423"];

Cách duy nhất tôi chuyển đổi mảng của mình thành json là

json = Object.assign({}, my_array);
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.