warum die Ausgänge sind unterschiedlich
da die Eingänge unterschiedlich sind.
erstes Szenario
obj = {a:"asdf"};
var newObj = JSON.parse(JSON.stringify(obj));
Hier wird der Eingangsparameter von JSON.parse
ist JSON.stringify(obj)
und dies ist eine Zeichenfolge, die {"a":"asdf"}
liest.
zweites Szenario
var newObj = JSON.parse("{"a":"asdf"}");
Hier wird der Eingangsparameter von JSON.parse
ist eine Zeichenfolge, die {
liest und der Rest ist gebrochen Code.
Verwirrung entsteht, weil die Konsole Debugger entscheidet sollten alle Saiten auf der mit einem "
verkapselt Konsole angezeigt werden, aber dies ist nur eine Möglichkeit für die Konsole, Ihnen zu sagen, dass dieser Wert vom Typ String ist. Es prüft nicht, ob du "drinnen bist und entkommst ihnen.
Die Kapselung "
sind nicht Teil der Zeichenfolge, nur eine Möglichkeit zu sagen, es ist eine Zeichenfolge.
Wenn console.logging JSON.stringify (obj) bekommt Sie "{"a":"asdf"}"
versuchen Sie stattdessen Alert, oder document.write. Diese fügen nicht extra "
hinzu und Sie werden sehen, dass der Wert von JSON.stringify (obj) tatsächlich {"a":"asdf"}
ist, nicht "{"a":"asdf"}"
.
<html><head></head><body>
<script>
function JSONparse(string) {
document.write(string);
alert(string);
console.log(string);
return JSON.parse(string);
}
var obj = {a:"asdf"};
result = JSONparse(JSON.stringify(obj));
</script>
</body></html>
Der Hinweis, den Sie in Ihrem Debugger bekommen, hat Sie verwirrt. Obwohl dort "{" a ":" asdf "}" 'zu sehen ist, ist dies keine korrekt formatierte Zeichenkette. Wenn Sie eine Zeichenfolge mit "dann beenden Sie es mit" beginnen. Das bedeutet, hier ist die Zeichenfolge nur "{" und der Rest ist Code gebrochen, der Browser weiß nicht, was zu tun ist. Wie in den Antworten gesagt, können Sie entweder 'den gesamten String als '{' a": "asdf"} ''kapseln oder Sie entkommen dem inneren" as '" {\ "a \": \ "asdf \"} "'. –
Ich verstehe, was Sie sagen wollen, aber - JSON.stringify (Obj) - gibt nur" {"a": "asdf"} "zurück, wie funktioniert es in diesem Fall. --JSON.parse (JSON.stringify (obj)) –
Das tut es nicht.Der Browser gibt es in der Konsole als '{" a ":" asdf "}" aus, aber es gibt tatsächlich eine Zeichenkette zurück, die '{" a ":" asdf "}'. Die Browser-Konsole entscheidet sich dafür, dies in ein "" einzufügen, da dies das Standardverhalten der Konsole mit Strings ist. Sie werden also "{" a ":" asdf "}" 'lesen, aber es handelt sich tatsächlich um einen Typstring mit dem Wert' {"a": "asdf"} '. –