JSON-Parser Syntaxerror in Opera und Firefox 3

Thomas D

Erfahrenes Mitglied
Hallo!

Von http://www.json.org habe ich mir den JSON-Parser geholt und in meinem Script verwendet. Dies hat in Firefox 2 unter Linux wunderbar funktioniert, lade ich die Seite jedoch in Opera oder Firefox 3 (mit IE habe ich's noch nicht getestet), dann bekomme ich folgenden Syntaxfehler:

Inline script compilation
Syntax error while loading: line 180 of linked script at http://localhost/tippspiel/implementation/jsJSONparse.js :
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17

Der Code in dieser Zeile sieht wie folgt aus:

Code:
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
            escapeable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
            gap,
            indent,
            meta = {    // table of character substitutions
                '\b': '\\b',
                '\t': '\\t',
                '\n': '\\n',
                '\f': '\\f',
                '\r': '\\r',
                '"' : '\\"',
                '\\': '\\\\'
            },
            rep;

Interessant ist, dass es in Firefox 2 läuft, Opera hier aber aufschreit. Hat jemand eventuell eine Idee, warum :confused:
 
Ich hab dazu Folgendes gefunden:
http://dev.opera.com/forums/topic/233477

Ich mag allerdings nicht so recht daran glauben, dass es an der Länge des Ausdruckes liegt, sondern hätte da eher die NUL-Pattern(u0000) im Verdacht.

Leider habe ich keinen Browser parat, bei dem das Problem nachvollziehbar war, obwohl ich es sowohl in FF3 als auch Opera9.27 getestet habe.

Es macht fast den Eindruck, als benützten die genannten Problembrowser eine gemeinsame, browserexterne Bibliothek für RegExp, denn in diesem Thema gibt es ebenfalls ein unerklärliches Problem, welches trotz identischer Browserversionen bei dem einen auftaucht und bei dem anderen(mir:)) nicht....und auch dort ist RegExp im Spiel.
 
Ich habe den Fehler auch (in Opera 9.27) und mir schon einen Wolf gesucht ...
Ich mag allerdings nicht so recht daran glauben, dass es an der Länge des Ausdruckes liegt, sondern hätte da eher die NUL-Pattern(u0000) im Verdacht.
Es liegt weder an der Länge noch an dem NUL-Pattern ...

Woran es allerdings tatsächlich liegt, weiß ich auch nicht genau. Mir hat jedenfalls ein Umstellen geholfen. Statt
Code:
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
    escapeable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
habe ich jetzt
Code:
var cx = /[\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff\u0000]/g,
    escapeable = /[\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff\\]/g,
Es scheint also sowohl \u0000 am Anfang zu stören als auch \\\" hintereinander. Da es sich aber bei [...] um eine Aufzählung handelt, spielt die Reihenfolge keine Rolle.
 
Zurück