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ć?


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/


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


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.


10

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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.