Konwertuj obiekt JS na ciąg JSON

1244

Jeśli zdefiniowałem obiekt w JS za pomocą:

var j={"name":"binchen"};

Jak przekonwertować obiekt na JSON? Łańcuch wyjściowy powinien być:

'{"name":"binchen"}'
Bin Chen
źródło
63
JSON.stringify()jest metodą, której szukasz.
Gowtham Gopalakrishnan
10
Zawsze musisz po raz pierwszy się tego nauczyć.
Egan Wolf

Odpowiedzi:

1922

Wszystkie obecne przeglądarki mają wbudowaną obsługę JSON. Tak długo, jak nie masz do czynienia z przeglądarkami prehistorycznymi, takimi jak IE6 / 7, możesz to zrobić tak łatwo:

var j = {
  "name": "binchen"
};
console.log(JSON.stringify(j));

Andris
źródło
5
pobierz ten skrypt , JSON.stringify(j);aby działać
AabinGunz
2
Pracuj na nodejs, ponieważ węzeł używa tego samego silnika
georgelviv
26
Ta odpowiedź została opublikowana na rok przed wydaniem IE9, więc w momencie pisania IE8 była rzeczywiście nowoczesną przeglądarką, a przynajmniej najnowszą dostępną IE.
Andris,
JSON.stringify nie przekształca zagnieżdżonych obiektów. Wszelkie rozwiązanie tego problemu?
Ritesh
9
Jeśli potrzebujesz bardziej czytelnego ciągu json, możesz użyć parametru spacji, takiego jakvar formattedJSON = JSON.stringify(j, null, 2);
Jacek Gzel
110

Dzięki JSON.stringify()znaleźć w json2.js lub rodzimy w większości nowoczesnych przeglądarek.

   JSON.stringify(value, replacer, space)
        value       any JavaScript value, usually an object or array.

       replacer    an optional parameter that determines how object
                    values are stringified for objects. It can be a
                    function or an array of strings.

       space       an optional parameter that specifies the indentation
                    of nested structures. If it is omitted, the text will
                    be packed without extra whitespace. If it is a number,
                    it will specify the number of spaces to indent at each
                    level. If it is a string (such as '\t' or ' '),
                    it contains the characters used to indent at each level.

       This method produces a JSON text from a JavaScript value.
Ignacio Vazquez-Abrams
źródło
6
Dla nieco większej jasności: replacer jest opcjonalne, więc jeśli chcesz nadal używać spaceargumentu można umieścić nullna replacer. Jeśli jesteś zainteresowany wykorzystaniem tej funkcji do ładnego drukowania, ta odpowiedź jest również przydatna: stackoverflow.com/a/7220510/857209
Glenn Lawrence
34

Sprawdź zaktualizowany / lepszy sposób autorstwa Thomasa Franka:

Aktualizacja 17 maja 2008: Dodano mały środek dezynfekujący do metody toObject. Teraz toObject () nie będzie ewaluować () ciągu, jeśli znajdzie w nim szkodliwy kod. Dla jeszcze większego bezpieczeństwa: Nie ustawiaj flagi includeFunctions na true.

Douglas Crockford, ojciec koncepcji JSON, napisał jeden z pierwszych strunikatorów dla JavaScript. Później Steve Yen z Trim Path napisał fajną, ulepszoną wersję, z której korzystałem od jakiegoś czasu. To moje zmiany w wersji Steve'a, którymi chciałbym się z tobą podzielić. Zasadniczo wynikały one z mojego pragnienia, aby utworzyć ciągnik:

  • obsługiwać i przywracać cykliczne odniesienia
  • dołącz kod JavaScript dla funkcji / metod (jako opcja)
  • w razie potrzeby wyklucz elementy składowe obiektu z Object.prototype.
Sarfraz
źródło
23

Możesz użyć metody JSON.stringify () do konwersji obiektu JSON na String.

var j={"name":"binchen"};
JSON.stringify(j)

W przypadku procesu odwrotnego można użyć metody JSON.parse () do konwersji ciągu JSON na obiekt JSON.

Aravindan Venkatesan
źródło
Dziękujemy za dodanie procesu odwrotnego.
David Lavieri
12

W angularJS

angular.toJson(obj, pretty);

obj: Dane wejściowe do serializacji do JSON.

pretty (opcjonalnie):
Jeśli ustawiona na wartość true, dane wyjściowe JSON będą zawierać znaki nowej linii i białe znaki. Jeśli ustawione na liczbę całkowitą, wyjście JSON będzie zawierało tyle spacji na wcięcie.

(domyślnie: 2)

Nazrul Islam
źródło
12

JSON.stringify(j, null, 4) dałby upiększony JSON na wypadek, gdybyś potrzebował również upiększenia

Drugi parametr to zamiennik. Można go użyć jako filtru, w którym można odfiltrować niektóre kluczowe wartości podczas tworzenia łańcucha. Ustawienie wartości null spowoduje zwrócenie wszystkich par wartości klucza

Vignesh Murugan
źródło
10

Jeśli używasz AngularJS, powinien to zrobić filtr „json”:

<span>{{someObject | json}}</span>
Ariel Cabib
źródło
9

JSON.stringify zamienia obiekt Javascript w tekst JSON i przechowuje ten tekst JSON w ciągu.

Konwersja jest obiektem na ciąg

JSON.parse zamienia ciąg tekstu JSON w obiekt JavaScript.

Konwersja jest ciągiem obiektowym

var j={"name":"binchen"};

aby był to ciąg JSON, można użyć następującego.

JSON.stringify({"key":"value"});

JSON.stringify({"name":"binchen"});

Aby uzyskać więcej informacji, zapoznaj się z tym linkiem poniżej.

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

Dulith De Costa
źródło
7

Jeden niestandardowy zdefiniowany do tego, dopóki nie zrobimy dziwnej z metody stringify

var j={"name":"binchen","class":"awesome"};
var dq='"';
var json="{";
var last=Object.keys(j).length;
var count=0;
for(x in j)
{
json += dq+x+dq+":"+dq+j[x]+dq;
count++;
if(count<last)
   json +=",";
}
json+="}";
document.write(json);

WYNIK

{"name":"binchen","class":"awesome"}

NA ŻYWO http://jsfiddle.net/mailmerohit5/y78zum6v/

Rohit Kumar
źródło
nie
unika
1
Ten niestandardowy kod jest bardzo niekompletny. Nie obsługuje tablic, obiektów i znaków specjalnych. Przykład: json {"arr": ["1", "2", "3"], "obj": {"a": "b"}, "key \" with \\ special} chars ":" wartość "} wyświetli {" arr ":" 1,2,3 "," obj ":" [obiekt Object] "," klucz "z \ special} chars": "wartość"}, co jest nieprawidłowe!
Manuel Romeiro
7

Miałem problemy z brakiem pamięci stringify i inne rozwiązania nie działały (przynajmniej nie mogłem ich zmusić do działania), kiedy natknąłem się na ten wątek. Dzięki Rohit Kumar po prostu iteruję przez mój bardzo duży obiekt JSON, aby zatrzymać awarię

var j = MyObject;
var myObjectStringify = "{\"MyObject\":[";
var last = j.length
var count = 0;
for (x in j) {
    MyObjectStringify += JSON.stringify(j[x]);
    count++;
    if (count < last)
        MyObjectStringify += ",";
}
MyObjectStringify += "]}";

MyObjectStringify dałby ci reprezentację ciągu (tak jak wspomniano wcześniej w tym wątku), chyba że masz duży obiekt, to powinno również działać - po prostu upewnij się, że zbudowałeś go do swoich potrzeb - Potrzebowałem go, aby miał nazwę niż tablica

Sam
źródło
5

Woking ... Łatwy w użyciu

$("form").submit(function(evt){
  evt.preventDefault();
  var formData = $("form").serializeArray(); // Create array of object
  var jsonConvert = JSON.stringify(formData);  // Convert to json
});

Dzięki

Subroto Biswas
źródło
3

możesz użyć natywnej funkcji stringify w ten sposób

const j={ "name": "binchen" }

/** convert json to string */
const jsonString = JSON.stringify(j)

console.log(jsonString) // {"name":"binchen"}

Alongkorn Chetasumon
źródło
3

jeśli chcesz uzyskać wartość właściwości json w postaci łańcucha, skorzystaj z następującego sposobu

var i = {"x":1}

var j = JSON.stringify(i.x);

var k = JSON.stringify(i);

console.log(j);

"1"

console.log(k);

'{"x":1}'
KARTHIKEYAN.A
źródło
3

Do debugowania w Node JS można użyć funkcji util.inspect () . Działa lepiej z referencjami cyklicznymi.

var util = require('util');
var j = {name: "binchen"};
console.log(util.inspect(j));
Pavel Netesa
źródło
3

Istniejące zamienniki JSON były dla mnie zbyt wiele, więc napisałem własną funkcję. Wydaje się, że to działa, ale mogłem przegapić kilka przypadków krawędzi (które nie występują w moim projekcie). I prawdopodobnie nie będzie działać dla żadnych wcześniej istniejących obiektów, tylko dla danych utworzonych samodzielnie.

function simpleJSONstringify(obj) {
    var prop, str, val,
        isArray = obj instanceof Array;

    if (typeof obj !== "object") return false;

    str = isArray ? "[" : "{";

    function quote(str) {
        if (typeof str !== "string") str = str.toString();
        return str.match(/^\".*\"$/) ? str : '"' + str.replace(/"/g, '\\"') + '"'
    }

    for (prop in obj) {
        if (!isArray) {
            // quote property
            str += quote(prop) + ": ";
        }

        // quote value
        val = obj[prop];
        str += typeof val === "object" ? simpleJSONstringify(val) : quote(val);
        str += ", ";
    }

    // Remove last colon, close bracket
    str = str.substr(0, str.length - 2)  + ( isArray ? "]" : "}" );

    return str;
}
Hauke
źródło
2
So in order to convert a js object to JSON String: 

Prosta składnia do konwersji obiektu na ciąg znaków to

JSON.stringify(value)

Pełna składnia to: JSON.stringify (wartość [, zamiennik [, spacja]])

Zobaczmy kilka prostych przykładów. Zauważ, że cały ciąg otrzymuje podwójne cudzysłowy, a wszystkie dane w ciągu są usuwane w razie potrzeby.

JSON.stringify("foo bar"); // ""foo bar""
JSON.stringify(["foo", "bar"]); // "["foo","bar"]"
JSON.stringify({}); // '{}'
JSON.stringify({'foo':true, 'baz':false}); /* " 
{"foo":true,"baz":false}" */



const obj = { "property1":"value1", "property2":"value2"};
const JSON_response = JSON.stringify(obj);
console.log(JSON_response);/*"{ "property1":"value1", 
"property2":"value2"}"*/
Rahul Choudhary
źródło
2
Byłoby wspaniale, gdybyś mógł podać krótkie wyjaśnienie swojego kodu.
jonny
To nie daje odpowiedzi na pytanie. Gdy zdobędziesz wystarczającą reputację , będziesz mógł komentować dowolny post ; zamiast tego podaj odpowiedzi, które nie wymagają wyjaśnienia od pytającego . - Z recenzji
Rafael
Zredagowałem swoją odpowiedź, dziękuję bardzo za wskazanie @Rafael i @ jonny.
Rahul Choudhary
1

Po prostu użyj, JSON.stringifyaby wykonać taką konwersję - pamiętaj jednak, że pola o undefinedwartości nie zostaną uwzględnione w json

var j={"name":"binchen", "remember":undefined, "age": null };

var s=JSON.stringify(j);

console.log(s);

Pole remember„znikają” z wyjścia json

Kamil Kiełczewski
źródło
Właśnie uratowałeś mi dzień. Nie byłem w stanie zapisać mojego obiektu. klucz, że pola o nieokreślonej wartości nie zostaną uwzględnione w json rozwiązał mój problem!
Mohammad Ghonchesefidi
0

Możesz użyć metody JSON.stringify () do konwersji obiektu JSON na String.

var j={"name":"hello world"};
JSON.stringify(j);

Aby przekonwertować ten ciąg znaków z powrotem na obiekt json, można użyć metody JSON.parse ().

realnikunj
źródło
0

posługiwać się JSON.stringify(param1, param2, param3);

Co jest: -

param1 -> wartość do konwersji na JSON

param2 -> funkcja do strunizacji na swój własny sposób. Alternatywnie, służy jako biała lista, dla której obiekty muszą być zawarte w końcowym JSON.

param3 -> Typ danych Number wskazujący liczbę białych znaków do dodania. Dozwolone są maksymalnie 10.

Deepak Agrawal
źródło
0

konwersja str => obj

const onePlusStr = '[{„brand”: „oneplus”}, {„model”: „7T”}] ”;

const onePLusObj = JSON.parse (onePlusStr);

konwersja obj => str

const onePLusObjToStr = JSON.stringify (onePlusStr);

Odwołania do analizy JSON w JS:
JSON.parse (): kliknij
JSON.stringify (): kliknij

yash
źródło
Czy możesz podać więcej informacji? Referencje itp.
Nodejs-nerd
Odniesienia JSON przetwarzania w JS: JSON.parse (): w3schools.com/js/js_json_parse.asp JSON.stringify (): w3schools.com/js/js_json_stringify.asp
YASH
dzięki, czy możesz edytować swoją odpowiedź, aby uwzględnić to
Nodejs-nerd
0

Bardzo łatwa w użyciu metoda, ale nie używaj jej w wersji (z powodu możliwych problemów ze zgodnością).

Idealne do testowania po twojej stronie.

Object.prototype.toSource()

//Usage:
obj.toSource();
ciało
źródło
0

Użyj funkcji stringify

var j = {
"name":"binchen"
};

var j_json = JSON.stringify(j);

console.log("j in json object format :", j_json);

Miłego kodowania !!!

Desire Kaleba
źródło
0
//use JSON.stringify({})

const stringified = JSON.stringify ({}) // przekaż obiekt, który chcesz przekonwertować w formacie łańcucha

Geetanshu Gulati
źródło
-1

Użyj tego,

var j={"name":"binchen"};
 var myJSON = JSON.stringify(j);
MKR
źródło
-24

jeśli masz ciąg json i nie jest on owinięty [], to najpierw go zawiń

var str = '{"city": "Tampa", "state": "Florida"}, {"city": "Charlotte", "state": "North Carolina"}';
str = '[' + str + ']';
var jsonobj = $.parseJSON(str);

LUB

var jsonobj = eval('(' + str + ')');
console.log(jsonobj);
Bhaumik Mehta
źródło
OP próbuje iść w drugą stronę. Twoje pytanie odpowiada odwrotnej sprawie, w której ma on ciąg JSON i chce uzyskać go jako obiekt.
Joshua Snider
1
zrobiłeś coś odwrotnego do pytania ... powinieneś użyć funkcji JSON.stringfy ()
Hardik Patel