J'utilise Sencha Touch (ExtJS) pour obtenir un message JSON du serveur. Le message que je reçois est celui-ci:
{
"success": true,
"counters": [
{
"counter_name": "dsd",
"counter_type": "sds",
"counter_unit": "sds"
},
{
"counter_name": "gdg",
"counter_type": "dfd",
"counter_unit": "ds"
},
{
"counter_name": "sdsData",
"counter_type": "sds",
"counter_unit": " dd "
},
{
"counter_name": "Stoc final",
"counter_type": "number ",
"counter_unit": "litri "
},
{
"counter_name": "Consum GPL",
"counter_type": "number ",
"counter_unit": "litri "
},
{
"counter_name": "sdg",
"counter_type": "dfg",
"counter_unit": "gfgd"
},
{
"counter_name": "dfgd",
"counter_type": "fgf",
"counter_unit": "liggtggggri "
},
{
"counter_name": "fgd",
"counter_type": "dfg",
"counter_unit": "kwfgf "
},
{
"counter_name": "dfg",
"counter_type": "dfg",
"counter_unit": "dg"
},
{
"counter_name": "gd",
"counter_type": "dfg",
"counter_unit": "dfg"
}
]
}
Mon problème est que je ne peux pas analyser cet objet JSON afin de pouvoir utiliser chacun des objets compteur.
J'essaye d'accomplir cela comme ceci:
var jsonData = Ext.util.JSON.decode(myMessage);
for (var counter in jsonData.counters) {
console.log(counter.counter_name);
}
Qu'est-ce que je fais mal ? Je vous remercie!
javascript
json
extjs
maephisto
la source
la source
Réponses:
Javascript a une analyse JSON intégrée pour les chaînes, ce que je pense que vous avez:
utiliser ceci avec votre exemple serait:
Voici un exemple de travail
EDIT : Il y a une erreur dans votre utilisation de la boucle for (j'ai manqué cela lors de ma première lecture, crédit à @Evert pour le spot). l'utilisation d'une boucle for-in définira la variable comme le nom de propriété de la boucle actuelle, et non les données réelles. Voir ma boucle mise à jour ci-dessus pour une utilisation correcte
IMPORTANT : la
JSON.parse
méthode ne fonctionnera pas dans les anciens navigateurs anciens - donc si vous prévoyez de rendre votre site Web disponible via une sorte de connexion Internet à temps perdu, cela pourrait être un problème! Si vous êtes vraiment intéressé, voici un tableau de support (qui coche toutes mes cases).la source
Ceci est ma réponse,
la source
Dans une boucle for-in-loop, la variable en cours d'exécution contient le nom de la propriété, pas la valeur de la propriété.
Mais comme compteurs est un tableau, vous devez utiliser une boucle for normale:
la source
La "méthode Sencha" pour interagir avec les données du serveur consiste à configurer un
Ext.data.Store
proxy par unExt.data.proxy.Proxy
(dans ce casExt.data.proxy.Ajax
) fourni avec unExt.data.reader.Json
(pour les données codées JSON, il existe également d'autres lecteurs disponibles). Pour réécrire des données sur le serveur, il existeExt.data.writer.Writer
plusieurs types.Voici un exemple de configuration comme celle-ci:
data1.json
dans cet exemple (également disponible dans ce violon ) contient vos données textuellement.idProperty: 'counter_name'
est probablement facultatif dans ce cas, mais pointe généralement sur l'attribut de clé primaire.rootProperty: 'counters'
spécifie quelle propriété contient un tableau d'éléments de données.Avec une configuration de magasin de cette façon, vous pouvez relire les données du serveur en appelant
store.load()
. Vous pouvez également connecter le magasin à n'importe quel composant d'interface utilisateur approprié de Sencha Touch, comme des grilles, des listes ou des formulaires.la source
Quelque chose de plus pertinent pour moi ...
la source
Cela fonctionne comme du charme!
J'ai donc édité le code selon mes besoins. Et voici les changements: Cela enregistrera le numéro d'identification de la réponse dans la variable d'environnement.
la source
La réponse avec le vote le plus élevé est une erreur. quand je l'ai utilisé, je le découvre à la ligne 3:
Je l'ai changé en:
et cela a fonctionné pour moi. Il y a une différence avec les autres réponses de la ligne 3:
la source
Juste comme un avertissement ...
est obsolète .
Postman Learning Center suggère maintenant
la source
Vous devez utiliser une banque de données et un proxy dans ExtJs. Il existe de nombreux exemples de cela et le lecteur JSON analyse automatiquement le message JSON dans le modèle que vous avez spécifié.
Il n'est pas nécessaire d'utiliser du Javascript de base lors de l'utilisation d'ExtJs, tout est différent, vous devez utiliser les moyens d'ExtJs pour tout faire correctement. Lisez attentivement la documentation, c'est bien.
À propos, ces exemples valent également pour Sencha Touch (en particulier la v2), qui repose sur les mêmes fonctions de base que ExtJs.
la source
Je ne sais pas si mes données correspondaient exactement, mais j'avais un tableau de tableaux d'objets JSON, qui ont été exportés à partir de jQuery FormBuilder lors de l'utilisation de pages.
J'espère que ma réponse pourra aider tous ceux qui tombent sur cette question à la recherche d'une réponse à un problème similaire à ce que j'avais.
Les données ressemblaient un peu à ceci:
Ce que j'ai fait pour analyser cela était simplement de faire ce qui suit:
la source