jquery json do string?

79

Zamiast przechodzić z ciągu json i używać $ .parseJSON, muszę wziąć mój obiekt i zapisać go w zmiennej jako ciąg reprezentujący json.

(Biblioteka, z którą mam do czynienia, oczekuje nieprawidłowego typu json, więc muszę się z nim bawić, aby działał).

Jak najlepiej to zrobić?

Incognito
źródło
1
możliwy duplikat serializacji do JSON w jQuery
Wolph
Która biblioteka oczekuje nieprawidłowego ciągu JSON? : /
Marcel Korpel
Stanford JavaScript Cryptography Library generuje i analizuje zniekształcony kod JSON. W tej chwili błąd jest wprowadzany.
Incognito

Odpowiedzi:

84

Edycja: Zamiast implementować poniższy kod, należy użyć biblioteki json2.js od Douglasa Crockforda. Zapewnia dodatkowe funkcje i lepszą / starszą obsługę przeglądarki.

Pobierz plik json2.js z: 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"}'

Kod z: http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/

Inigoesdr
źródło
23
Polecam json2.js bibliotekę zamiast tej funkcji, ponieważ nie obsługuje poprawnie niektórych typów, takich jak właściwości zawierających undefined, funkcje, (które nie są prawidłowe wartości JSON), Boolean obiektów (np new Boolean(true);) lub NaNktóre powinny być zastąpione with null, etc ... również nie obsługuje dodatkowych opcjonalnych argumentów, replacerfunkcji i spacesliczby dla wcięć, które są w pełni opisane w standardzie.
Christian C. Salvadó
3
myślę, że może link json2
fisherwebdev
5
Większość przeglądarek ma obecnie natywny obiekt JSON, który obejmuje metody analizowania i określania ciągu. Więc po prostu spróbuj JSON.stringify({})i zobacz, czy otrzymasz "{}"bez konieczności dołączania powyższego kodu. Możesz nawet przekazać parametry, aby odfiltrować klucze lub wykonać ładne drukowanie, np. JSON.stringify({a:1,b:2}, null, 2)Umieszcza nową linię i 2 spacje przed każdym kluczem.
AlexChaffee
Dla poszukujących nowoczesnej odpowiedzi: JSON.stringify (); jest zaimplementowany we wszystkich przeglądarkach (stacjonarnych i mobilnych): developer.mozilla.org/en/docs/Web/JavaScript/Reference/ ...
Pablo Martinez
38

używam

$.param(jsonObj)

co daje mi ciąg.

Jonathan
źródło
8
Ale to nie tworzy JSON (i to było pytanie).
Felix Kling
22
ale ten mały kod zajmuje się wszystkimi tytułami pytań: P
nils petersohn
35

Większość przeglądarek ma obecnie natywny JSONobiekt, który obejmuje parsei stringifymetody. Więc po prostu spróbuj JSON.stringify({})i zobacz, czy dostaniesz "{}". Możesz nawet przekazać parametry, aby odfiltrować klucze lub wykonać ładne drukowanie, np. JSON.stringify({a:1,b:2}, null, 2)Umieszcza nową linię i 2 spacje przed każdym kluczem.

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

daje

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

który drukuje jako

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

Jeśli chodzi o zamieszanie wokół części pytania, użyj drugiego parametru. Z http://www.javascriptkit.com/jsref/json.shtml :

Parametr zastępujący może być funkcją lub tablicą ciągów / liczb. Przechodzi przez każdy element członkowski w obiekcie JSON, aby pozwolić Ci zdecydować, na jaką wartość należy zmienić każdy element członkowski. Jako funkcja może zwrócić:

  • Liczba, ciąg lub wartość logiczna, która zastępuje oryginalną wartość właściwości zwróconą.
  • Obiekt, który jest serializowany, a następnie zwracany. Metody lub funkcje obiektowe są niedozwolone i zamiast tego są usuwane.
  • Null, co powoduje usunięcie właściwości.

Jako tablica wartości zdefiniowane w niej odpowiadają nazwom właściwości wewnątrz obiektu JSON, które powinny zostać zachowane po przekonwertowaniu na obiekt JSON.

AlexChaffee
źródło
10

Najlepszym sposobem, jaki znalazłem, jest użycie jQuery JSON

David Reynolds
źródło
1
ponieważ jest to wtyczka jquery, a nie to, co jest bezpośrednio dostarczane przez jquery
Rajat Gupta
@ user01 ale jquery nie obejmuje sposób to zrobić (przynajmniej tak się nie stało, gdy pisałem tę odpowiedź, nie wiem, czy to robi teraz)
David Reynolds
@DavidReynolds: tak, oczywiście, rozumiem :) Nie zamierzałem cię obrazić, ale właśnie skomentowałem to jako rozwiązanie problemu :)
Rajat Gupta
0

Możesz przeanalizować JSON do obiektu, a następnie utworzyć zniekształcony kod JSON z obiektu ajavscript. Jednak może to nie być najlepsza wydajność.

W przeciwnym razie, jeśli chcesz dokonać tylko bardzo małych zmian w ciągu, po prostu potraktuj go jako ciąg i zmodyfikuj go za pomocą standardowego javascript.

cofiem
źródło