Ich verwende ein JS-Objekt, um Diagramme mit Google-Visualisierung zu erstellen. Ich versuche die Datenquelle zu entwerfen. Zuerst habe ich ein JS-Objekt clientseitig erstellt.
var JSONObject = {
cols: [{
id: 'date',
label: 'Date',
type: 'date'
},
{
id: 'soldpencils',
label: 'Sold Pencils',
type: 'number'
},
{
id: 'soldpens',
label: 'Sold Pens',
type: 'number'
}
],
rows: [{
c: [{
v: new Date(2008, 1, 1),
f: '2/1/2008'
}, {
v: 30000
}, {
v: 40645
}]
},
{
c: [{
v: new Date(2008, 1, 2),
f: '2/2/2008'
}, {
v: 14045
}, {
v: 20374
}]
},
{
c: [{
v: new Date(2008, 1, 3),
f: '2/3/2008'
}, {
v: 55022
}, {
v: 50766
}]
}
]
};
var data = new google.visualization.DataTable(JSONObject, 0.5);
Jetzt muss ich die Daten dynamisch abrufen. Also sende ich eine AJAX-Anfrage an eine Seite, die die JSON-Zeichenfolge zurückgibt:
"cols: [{id: 'date', label: 'Date', type: 'date'},
{id: 'soldpencils', label: 'Sold Pencils', type: 'number'},
{id: 'soldpens', label: 'Sold Pens', type: 'number'}],
rows: [{c:[{v: new Date(2008,1,1),f:'2/1/2008'},{v: 30000}, {v: 40645}]},
{c:[{v: new Date(2008,1,2),f:'2/2/2008'},{v: 14045}, {v: 20374}]},
{c:[{v: new Date(2008,1,3),f:'2/3/2008'},{v: 55022}, {v: 50766}]}"
Dies speichere ich in einer Variablen:
var var1 = "cols: [{i ....... 66}]}"
und zeigen als
alert(var1);
Jetzt ist meine Aufgabe, aus dieser Zeichenfolge ein JS-Objekt zu erstellen. Das funktioniert nicht. Wenn ich ein JS-Objekt verwende, funktioniert alles einwandfrei und ich kann mein gewünschtes Diagramm abrufen. Wenn ich nun versuche, den gleichen Wert der Zeichenfolge aus der AJAX-Anforderung, die ich anhand einer Warnmeldung bestätigt habe, in ein Objekt einzufügen, wird das Objekt nicht korrekt erstellt. Bitte teilen Sie mir Ihre Meinung und eventuelle Korrekturen oder Ratschläge mit.
eval(json_string)
Methode, um eine Zeichenfolge für das JSON-Objekt abzurufen. Seien Sie jedoch gewarnt, dieselbe Funktion kann möglicherweise gefährlich sein, da sie auch Skripte ausführen kann."
‚s in gültiger JSON: simonwillison.net/2006/Oct/11/jsonAntworten:
Einige moderne Browser unterstützen das Parsen von JSON in ein natives Objekt:
var var1 = '{"cols": [{"i" ....... 66}]}'; var result = JSON.parse(var1);
Für die Browser, die dies nicht unterstützen, können Sie json2.js von json.org herunterladen, um ein JSON-Objekt sicher zu analysieren. Das Skript prüft, ob native JSON-Unterstützung vorhanden ist. Wenn diese nicht vorhanden ist, stellen Sie stattdessen das globale JSON-Objekt bereit. Wenn das schnellere native Objekt verfügbar ist, wird das Skript einfach beendet und bleibt intakt. Sie müssen jedoch einen gültigen JSON angeben, da sonst ein Fehler ausgegeben wird . Sie können die Gültigkeit Ihres JSON mit http://jslint.com oder http://jsonlint.com überprüfen .
quelle
Sie können eval (jsonString) verwenden, wenn Sie den Daten in der Zeichenfolge vertrauen. Andernfalls müssen Sie sie ordnungsgemäß analysieren. Überprüfen Sie json.org auf einige Codebeispiele.
quelle
Die Zeichenfolge in Ihrer Frage ist keine gültige JSON-Zeichenfolge. Von der Website json.org :
Grundsätzlich beginnt eine JSON-Zeichenfolge immer mit {oder [.
Dann können Sie, wie @Andy E und @Cryo sagten, die Zeichenfolge mit json2.js oder einigen anderen Bibliotheken analysieren.
IMHO sollten Sie eval vermeiden, da es jedes Javascript-Programm wird, so dass Sie in Sicherheitsproblemen auftreten können.
quelle
Sie können diese Bibliothek von JSON.org verwenden, um Ihre Zeichenfolge in ein JSON-Objekt zu übersetzen.
var var1_obj = JSON.parse(var1);
Oder Sie können auch die jquery-json- Bibliothek verwenden.
var var1_obj = $.toJSON(var1);
quelle
Die von Ihnen zurückgegebene Zeichenfolge ist ungültiger JSON. Die Namen in den Objekten müssen in Anführungszeichen gesetzt und die gesamte Zeichenfolge muss eingegeben werden
{ … }
, um ein Objekt zu bilden. JSON kann auch so etwas nicht enthaltennew Date()
. JSON ist nur eine kleine Teilmenge von JavaScript , die nur Zeichenketten hat, Zahlen, Objekte, Arraystrue
,false
undnull
.Weitere Informationen finden Sie in der JSON-Grammatik .
quelle