Konwertuj tablicę na JSON

383

Mam tablicę, var cars = [2,3,..]która zawiera kilka liczb całkowitych. Dodałem kilka wartości do tablicy, ale teraz muszę wysłać tę tablicę na stronę za pomocą .getmetody jQuery . Jak przekonwertować go na obiekt JSON do wysłania?

rozsiany
źródło
Wystarczy dwukrotnie sprawdzić: czy tablica, którą chcesz wysłać na stronę, jest tablicą JavaScript, czy jest na serwerze?
Ian Oxley
jest to tablica JavaScript, wyślę ją do skryptu Python, a Python użyje łańcucha JSON i będzie z tym pracować.
dotty

Odpowiedzi:

657

Skrypt kompatybilności wstecznej: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

I zadzwoń:

var myJsonString = JSON.stringify(yourArray);

Uwaga: Obiekt JSON jest teraz częścią większości nowoczesnych przeglądarek internetowych (IE 8 i nowsze). Zobacz caniuse pełnego wykazu. Podziękowania dla: @Spudley za komentarz poniżej

JonoW
źródło
5
To działa, czy jQuery ma taką funkcję? Wolałbym nie dołączać innego pliku js, jeśli jQuery ma już funkcję.
dotty
1
jQuery ma implementację JSON.parse w 1.4.1, ale nie JSON.stringify ... Jeśli minifiy json2.js jego <3k myślę.
gnarf
6
Tak, byłem zaskoczony, że jQuery też nie ma tego wbudowanego
JonoW
120
dla każdego, kto wciąż czyta tę odpowiedź, warto zauważyć, że wszystkie nowoczesne przeglądarki zawierają ten JSONobiekt w standardzie, co oznacza, że nie potrzebujesz tego skryptu, chyba że planujesz obsługę starszych przeglądarek, takich jak IE7 lub Firefox 3.0. Zobacz CanIUse na wykresie wsparcia.
Spudley
1
Warto zaznaczyć, że możesz to zrobić w konsoli przeglądarki: var a = [paste]; JSON.stringify (a)
Michael Cole
70

Zrobiłem to w ten sposób:

Jeżeli mam:

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

aby przekonwertować pluginArrayArg (czyli czystą tablicę javascript) na tablicę JSON:

var jsonArray = JSON.parse(JSON.stringify(pluginArrayArg))
Stancho Stanchev
źródło
1
Uratowałeś mi życie
MD. Shafayatul Haque
44

Wow, wygląda na to, że jest teraz dużo łatwiej ... 3 sposoby na zrobienie tego:

json = { ...array };

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

json = array.reduce((json, value, key) => { json[key] = value; return json; }, {});
Eduardo Sganzerla
źródło
2
jsonString = JSON.stringify({ ...array })
Krishna Torque
11

Zdecydowałem się użyć biblioteki json2 i dostałem błąd dotyczący „cyklicznych struktur danych”.

Rozwiązałem ten problem, mówiąc json2, jak przekonwertować mój złożony obiekt. Nie tylko teraz działa, ale uwzględniłem tylko pola, których potrzebuję. Oto jak to zrobiłem:

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;
   }
Paulo Pedroso
źródło
11

Lub spróbuj zdefiniować tablicę jako obiekt. (var cars = {};) Zatem nie ma potrzeby konwersji na json. To może nie być praktyczne w twoim przykładzie, ale działało dobrze dla mnie.

Frank Adrian
źródło
4

Innym sposobem może być to:

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

        var json_string = JSON.stringify(json_arr);
Vijay Bansal
źródło
1

Jeśli masz tylko 1 obiekt, taki jak ten, o który prosiłeś, następujące będą działać.

var x = [{'a':'b'}];
var b= JSON.stringify(x);
var c = b.substring(1,b.length-1);
JSON.parse(c); 
Mahmoud ihmaid
źródło
1

Najkrótszym sposobem, jaki znam, aby wygenerować prawidłowy Json z tablicy liczb całkowitych, jest

let json = `[${cars}]`

dla bardziej ogólnego obiektu / tablicy (bez odwołań cyklicznych ) użyj JSON.stringify (samochody)

Kamil Kiełczewski
źródło
1

ponieważ moja tablica była jak poniżej: i użyłem funkcji .push, aby utworzyć ją dynamicznie

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

Jedynym sposobem, w jaki przekształciłem moją tablicę w json, jest

json = Object.assign({}, my_array);
Harshal Lonare
źródło