75 votes

Chaîne JSON en objet JS

Je suis à l'aide d'un objet JS pour créer des graphiques à l'aide de Google de visualisation. Je suis en train de concevoir la source de données. Au premier abord, j'ai créé un objet JS côté client.

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, j'ai besoin de récupérer les données de façon dynamique. J'ai donc envoyer 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}]}"

Cela, je l'enregistrer dans une variable:

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

et de montrer que

alert(var1);

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

137voto

Andy E Points 132925

Certains navigateurs modernes disposent d'un soutien pour l'analyse 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 json2.js à partir de json.org pour la sécurité de l'analyse d'un objet JSON. Le script va vérifier pour les natifs support JSON et si elle n'existe pas, fournir le JSON global de l'objet à la place. Si la plus rapide, les autochtones de l'objet est disponible, il suffit de quitter le script en le laissant intact. Toutefois, vous devez fournir JSON valide ou il lèvera une erreur, vous pouvez vérifier la validité de votre JSON avec http://jslint.com ou http://jsonlint.com.

5voto

whackamole Points 51

Vous pouvez utiliser eval (jsonString) si vous faites confiance aux données de la chaîne. Sinon, vous devrez l'analyser correctement. Consultez json.org pour des exemples de code.

5voto

filippo Points 1013

la chaîne dans votre question n'est pas une chaîne json valide. À partir de json.org site web:

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 commencez toujours avec soit { ou [.

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

À mon humble avis, vous devriez éviter eval parce qu'il va tout programme javascript, de sorte que vous pourriez engager dans les questions de sécurité.

4voto

nortron Points 3267

Vous pouvez utiliser cette bibliothèque à partir de JSON.org pour traduire votre chaîne en objet JSON.

 var var1_obj = JSON.parse(var1);
 

Ou vous pouvez aussi utiliser la bibliothèque jquery-json .

 var var1_obj = $.toJSON(var1);
 

3voto

Gumbo Points 279147

La chaîne que vous renvoyez n'est pas un JSON valide. Les noms dans les objets doivent être cités et la chaîne entière doit être placée dans { … } pour former un objet. JSON ne peut pas non plus contenir quelque chose comme new Date() . JSON est juste un petit sous-ensemble de JavaScript qui ne contient que des chaînes, des nombres, des objets, des tableaux, true , false et null .

Consultez la grammaire JSON pour plus d'informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X