Question

J'utilise un objet JS pour créer des graphiques avec visualisation Google. Je suis en train de concevoir la source de données. Au début, je créé un côté client de l'objet JS.

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

Maintenant je dois récupérer les données dynamiquement. J'envoie une requête AJAX vers une page qui renvoie la chaîne JSON:

 "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}]}"

Je sauverai dans une variable:

var var1 = "cols: [{i ....... 66}]}"

et de montrer que

alert(var1);

Maintenant, ma tâche est de créer un objet JS de cette chaîne. Ce ne fonctionne pas. Lorsque j'utilise un objet JS, tout fonctionne très bien et je suis en mesure d'obtenir mon graphique nécessaire. Maintenant, si je tente de mettre la même valeur de chaîne de la requête AJAX que je confirme à partir d'un message d'alerte dans un objet n, l'objet ne se crée correctement. S'il vous plaît laissez-moi savoir votre opinion et toute correction ou conseils.

Était-ce utile?

La solution

Certains navigateurs modernes ont un soutien pour l'analyse syntaxique JSON dans un objet natif:

var var1 = '{"cols": [{"i" ....... 66}]}';
var result = JSON.parse(var1);

Pour les navigateurs qui ne supportent pas, vous pouvez télécharger à partir json2.js json.org pour l'analyse en toute sécurité d'un objet JSON. Le script vérifiera pour le support JSON natif et si elle n'existe pas, fournir l'objet global JSON à la place. Si le plus rapide, objet natif est disponible, il sera tout simplement quitter le script en laissant intact. Vous devez toutefois fournir JSON valide ou il affichera une erreur - vous pouvez vérifier la validité de votre JSON avec http://jslint.com ou http://jsonlint.com .

Autres conseils

Vous pouvez utiliser eval (jsonString) si vous faites confiance aux données dans la chaîne, sinon vous devrez analyser correctement - vérifier json.org pour certains échantillons de code

.

la chaîne dans votre question n'est pas une chaîne JSON valide. De json.org site :

  

JSON est construit sur deux structures:

* 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.

Fondamentalement, une chaîne JSON commence toujours par une ou l'autre {ou [.

Alors que @Andy E et @Cryo dit que vous pouvez analyser la chaîne avec json2.js ou d'autres bibliothèques.

à mon humble avis, vous devriez éviter eval car il ne importe quel programme javascript, donc vous pourriez engager dans les questions de sécurité.

Vous pouvez utiliser cette bibliothèque de JSON.org pour traduire votre chaîne dans un objet JSON.

var var1_obj = JSON.parse(var1);

Vous pouvez également utiliser le jquery-json bibliothèque ainsi.

var var1_obj = $.toJSON(var1);

La chaîne vous est pas valide retournerez JSON. Les noms des objets doit être cité et toute la chaîne doit être mis en { … } pour former un objet. JSON ne peut pas contenir aussi quelque chose comme new Date(). JSON est juste un petit sous-ensemble de JavaScript qui ne dispose que des chaînes, des nombres, des objets, des tableaux, true, false et null.

Voir la JSON grammaire pour plus d'informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top