JSON-Zeichenfolge zum JS-Objekt


73

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.


1
Verwenden Sie die Javascript- 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.
Buhake Sindi

1
nur ein FYI - Schlüsselnamen und Strings muss drin sein "‚s in gültiger JSON: simonwillison.net/2006/Oct/11/json
gnarf

Mögliches Duplikat der Serialisierung an JSON in jQuery
outis

Überprüfen Sie dies aus w3schools.com/json/json_eval.asp
Mehmet Ataş

Antworten:


136

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 .


5

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.


1
Kann ich Inhalten aus der API einer großen Website (Reddit) vertrauen?

5

Die Zeichenfolge in Ihrer Frage ist keine gültige JSON-Zeichenfolge. Von der Website json.org :

JSON basiert auf zwei Strukturen:

* A collection of name/value pairs. In various languages, this is 
  realized as an object, record, struct, dictionary, hash table, keyed list, or
  associative array.
* An ordered list of values. In most languages, this is realized as an
  array, vector, list, or sequence.

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.


4

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);

3

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 enthalten new Date(). JSON ist nur eine kleine Teilmenge von JavaScript , die nur Zeichenketten hat, Zahlen, Objekte, Arrays true, falseund null.

Weitere Informationen finden Sie in der JSON-Grammatik .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.