| 

.NET C# Java Javascript Exception

1
Wie ich in einer Frage bereits geschrieben habe, gibt es Probleme im IE 7 beim Umwandeln von Strings in JSON.

Ich habe Folgendes versucht:

var test = {"Hallo":"etwas"};
alert(test);
alert(JSON.stringify(test));
alert(JSON.parse(test));
alert(jQuery.JSONparse(test));


Der erste Alert gibt [object Object] aus, der zweite den korrekten String. Der dritte gibt eine Funktion aus (typeof ist 'function'), der vierte NULL.

Also scheint die Konversion eines Objekt in einen String ohne Probleme zu laufen. Umgekehrt funktionierte es bei mir bisher nicht.

Welche Lösungsmöglichkeiten gibt es?
10.05.2011
johny7 521 8
3 Antworten
2
Habe noch auf die Schnelle einen Link gefunden (siehe Stackoverflow) der die Thematik behandelt. Ist allerdings die generelle Beschreibung wie man einen String in ein Objekt konvertiert.

Hier wird zu einem JSON Parser geraten. Das könnte auch dein Problem mit dem IE7 lösen. Ich selbst kann es gerade leider nicht ausprobieren. Ebenfalls ein recht gutes Tutarial findest du hier.

*UPDATE*
Dieses Parsing hat bei mir im IE7 funktioniert:

<script type="javascript/text" src="json2.js">
</script>

<script type="javascript/text">
var JsonStr = '{"Test1" : "etwas1", "Test2" : "etwas2"}';
var result = JSON.parse(JsonStr);
alert('Test1: ' + result.Test1 + ' & Test2:' + result.Test2);
</script>
10.05.2011
Dustin Klein 2,9k 1 9
Ich verwende ja einen Parser. Ich habe schon verschiedene ausprobiert. Die jQuery-Methode parseJSON, das JSON-Plugin dazu, JSON.parse (auf json.org empfohlen), aber kein Ansatz hat bisher in IE7 gefruchtet.
johny7 10.05.2011
Nutzt du denn auch die JSON2 Library (json2.js) für den IE7? Neue Browser haben eine integrierte JSON Umgebung, ältere Browser dagegen nicht, wodurch es zu "undefined" Meldungen kommt.
Dustin Klein 10.05.2011
Meinst du die jquery.json-2.2.js bei Google Code?
johny7 10.05.2011
Weiß nicht, ob die jQuery JSON 2.2 Lib gleichzusetzen ist mit der ursprünglichen. Aber sollte theretisch funktionieren. Ansonsten: https://github.com/douglascrockford/JSON-js/blob/master/json2.js
Dustin Klein 10.05.2011
Danke. Scheinbar handelt es sich um dieselbe Bibliothek. Aber in der Readme von github stand drin, dass das neue Objekt nur dann erzeugt wird, wenn es noch nicht existiert. Nachdem ich eine andere JSON-Bibliothek aus meinen Funktionen entfernt habe, funktioniert es jetzt.
johny7 11.05.2011
0
Werf mal einen Blick auf die Bibliothek jquery-json, vielleicht hilft die dir weiter.
10.05.2011
Mario Priebe 6,0k 2 9
Habe ich probiert. Geholfen hat es leider nicht.
johny7 10.05.2011
0
Probier mal:

var test = '{"Hallo":"etwas"}';
alert(eval('('+test+')'));


Das funktioniert bei mir auch im IE 7.
10.05.2011
Floyd 14,4k 3 9
Ist natürlich nicht gerade sicher, wenn der String den du evaluierst weiteren JSON Code enthält der ausgeführt werden kann. Generell funktioniert das aber in allen Browsern.
Dustin Klein 10.05.2011
Meinst du sowas? '{"msg":{text:"hallo"}}' dann ist es ja auch richtig ;) Und sowas '{"msg":'{text:"hallo"}'}' sollte auch richtig funktionieren, so das der innere teil nicht ausgeführt wird.
Floyd 10.05.2011
Das habe ich probiert. Das funktioniert. Bei sehr einfachen Objekten funktioniert das. Aber sobald es etwas komplexer wird, hakt es. Nach wie vor ist es ziemlich doof, wenn man erst den String (der per AJAX kommt) nachbereiten muss. Es muss doch eine elegante Lösung geben...
johny7 10.05.2011

Stelle deine Javascript-Frage jetzt!