2016-09-27 5 views
2

Ich habe ein Problem mit JSON-Strings hin und her zwischen PHP und Javascript Ajax Anrufe. Die PHP-Routinen senden JSON codierte Strings ohne Anführungszeichen um den Gleitkommazahlen, dhCompound Ersetzen von Fließkommazahl durch doppelte Anführungszeichen

{"Route_1":[{"lat":-31.526107395574975,"lng":146.31591796875},{"lat":-31.51674215813217,"lng":145.5303955078125}]}} 

Aber wenn die JSON-String von der Ajax-Routine empfangen wird, werden alle Gleitkommazahlen haben doppelte Anführungszeichen um sie wie hier gezeigt:

{"Route_1":[{"lat":"-31.526107395574975","lng":"146.31591796875"},{"lat":"-31.51674215813217","lng":"145.5303955078125"}]} 

So nach ein paar Tagen versuchen, auf den Grund, es zu bekommen, ich habe die beste Vorgehensweise entschieden, gerade diese zu analysieren, die doppelten Anführungszeichen zu entfernen. Ich kann die Gleitkommazahlen identifizieren und .replace and callback verwenden. aber die Compound-Ersetzung funktioniert nicht so, wie ich es erwarten würde - das heißt, es gibt nur die gleiche Zeichenfolge zurück.

Kann jemand bitte etwas Licht darauf werfen? btw das ist nicht das gleiche Problem wie die Frage, how to parse a JSON string.

var str = '{"Route_1":[{"lat":"-31.526107395574975","lng":"146.31591796875"},{"lat":"-31.51674215813217","lng":"145.5303955078125"}]}' 
 

 
var regex = /[-+]?[0-9]*\.?[0-9]+/g; 
 

 
var t = str.replace(regex, function(x) { 
 
    return x.replace(/"/g, ""); 
 
}) 
 

 
console.log(t);

+2

Warum würden Sie Regex verwenden, wenn Sie ein perfekt servicable JSON haben Sie in ein Objekt konvertieren und dann manipulieren? – vlaz

+0

Obwohl es tatsächlich scheint, dass _isnot_ gültige JSON ist. Wie auch immer, mein Punkt steht - Sie wollen Dinge mit JSON tun - wenn Sie einen haben, der gültig ist, sollten Sie ihn nicht neu schreiben müssen. – vlaz

+2

Mögliches Duplikat von [Wie man ein JSONArray analysiert und in Javascript konvertiert] (http://stackoverflow.com/questions/39398091/how-to-parse-a-jsonarray-and-convert-in-javascript) – vlaz

Antwort

2

Sie benötigen würde " als auch in der Regex übereinstimmen. Überprüfen Sie unten das Update.

var str = '{"Route_1":[{"lat":"-31.526107395574975","lng":"146.31591796875"},{"lat":"-31.51674215813217","lng":"145.5303955078125"}]}'; 
 

 
var regex = /\"[-+]?[0-9]*\.?[0-9]+\"/g; 
 

 
var t = str.replace(regex, function(x) { 
 
    return x.replace(/"/g, ""); 
 
}) 
 

 
console.log(t);

+1

1. Ich stimme nicht zu, dass Regex das richtige Werkzeug für den Job hier ist. 2. Das ist immer noch nicht korrekt JSON. – vlaz

+0

Es tut mir leid für den Fehler in JSON. Ich werde es oben korrigieren. Der Syntaxfehler hat sich eingeschlichen, als ich die JSON-Strings getestet habe, die vom Client gesendet wurden. Ich habe doppelte Anführungszeichen verwendet, um zu sehen, ob das das Problem verursacht hat. Der richtige JSON wird jetzt angezeigt. Vielen Dank – TrueBlue

Verwandte Themen