GWT: le contact avec les entrants chaîne JSON
Je suis en train de travailler sur une application GWT qui reçoit une chaîne JSON, et je vais avoir un moment difficile à passer pour les valeurs de chaque objet. Je suis en train de transférer la future chaîne JSON en un tableau d'objets.
Voici le JSON (à partir de Firebug onglet réponse), Le "d" est un .Chose NETTE (Web Service Consommé, c'est C#.
{
"d": [
{
"__type": "Event",
"ID": 30,
"Bin": 1,
"Date": "\/Date(1281544749000)\/",
"Desc": "Blue with white stripes.",
"Category": "1"
},
{
"__type": "Event",
"ID": 16,
"Bin": 3,
"Date": "\/Date(1281636239000)\/",
"Desc": "Yellow with pink stripes",
"Category": "1"
}
]
}
Je suis en train d'essayer de parser le JSON dans des objets, puis de les insérer dans un tableau. Je suis en mesure d'utiliser Window.alert
et obtenir l'ensemble du "d" de l'objet de l'écho. Cependant, lorsque j'essaie d'accéder aux éléments du tableau, GWT débogueur juste se bloque.
//My GWT array to receive JSON Array
ArrayList<Item> itemInfo = new ArrayList<Item>();
//Getting response JSON into something I can work with.(THIS FAILS)
JSONArray jsonValue = JSONParser.parse(incomingJsonRespone);
//Just trying to verify I'm getting values
for (int i=0; i<jsonValue.size(); i++) {
JSONValue jsonItem = = JsonValue.get(i).getString();
Window.alert(jsonItem);
itemInfo.add(jsonItem);
}
Je pense que je le ramène le problème à l'endroit où le JSONArray
instance est en cours de création. Est-il quelque chose de manifestement mal avec la façon dont je suis en train de le faire, parce que je ne reçois pas beaucoup d'aide dans la façon de messages d'erreur?
OriginalL'auteur tpow | 2010-08-16
Vous devez vous connecter pour publier un commentaire.
En réponse à RMorrisey commentaire:
En fait, c'est plus alambiqué :/Il ressemblerait à quelque chose comme ceci (code non testé, mais vous devriez obtenir l'idée générale):
Comme vous pouvez le voir, lors de l'utilisation de
JSONParser
vous devez/doit être très prudent, c'est l'ensemble de point, droite? Pour analyser un dangereux JSON (sinon, comme je l'ai suggéré dans les commentaires, vous devriez aller avec JavaScript Types D'Incrustation). Vous obtenez unJSONValue
, vérifier si c'est vraiment ce que vous pensez qu'elle devrait être, disons, unJSONObject
, vous obtenez ce queJSONObject
, vérifier si elle a la "xyz" de la clé, vous obtenez unJSONValue
, rincer et répéter. Pas le travail le plus intéressant, mais au moins, son plus sûr que de simplement appelereval()
sur l'ensemble du JSON 🙂À l'Attention de: que Jason l'a souligné, avant de GWT 2.1,
JSONParser
utiliséeval()
en interne (il n'avait qu'uneparse()
méthode - GWT 2.0 javadocs vs GWT 2.1). Dans GWT 2.1,parse()
est devenu obsolète et deux autres méthodes ont été introduites -parseLenient()
(utiliseeval()
à l'interne) etparseStrict()
(l'approche sécuritaire). Si vous devez vraiment utiliserJSONParser
, alors je vous suggère de mise à niveau de GWT 2.1 M2, parce que sinon, vous pourriez aussi bien utiliser JSOs. Comme une alternative àJSONParser
pour les sources non fiables, vous pouvez essayer d'intégrer json2.js comme un parser JSON via JSNI.PS: cinqoTimo,
JSONArray jsonValue = JSONParser.parse(incomingJsonRespone);
de toute évidence ne fonctionne pas parce queJSONParser.parse
a un type de retour deJSONValue
, pasJSONArray
- je n'ai pas votre IDE (Eclipse + Plugin Google?) vous avertir? Ou au moins le compilateur.JSONParser
'sparseStrict()
méthode pour non approuvé/arbitraire JSON: "ATTENTION! Pour plus d'efficacité, cette méthode est implémentée à l'aide du JavaScripteval()
fonction, qui peut executer le script. NE passez PAS confiance chaîne dans cette méthode." (à partir de code.google.com/p/google-web-toolkit/source/browse/trunk/user/... )Hmm, j'étais sous l'impression que
JSONParser
utilisé une approche plus sûre... j'allais suggérerparseStrict()
, mais ensuite, j'ai remarqué qu'il a été introduit dans GWT 2.1, donc OP peut-être pas encore disponible. Mais à la lumière de Jason commentaire, je suppose que c'est mieux pour la mise à niveau de GWT 2.1 M2 et l'utilisationparseStrict()
- sinon,JSONParser
a peu à aucune des avantages au JSO.Le code n'est pas exactement ça, mais l'idée était la bonne. Merci
+1 pour un simple explication de pourquoi la documentation de gwt est pas clair si la fonction eval() est utilisé à l'intérieur ou pas.
OriginalL'auteur Igor Klimer
Il semble que vous n'avez pas un tableau, mais un seul objet racine, dont le propriété appelée 'd' est un tableau. Je ne suis pas familier avec cette API, mais peut-être que vous pouvez essayer de récupérer une JSONObject ou semblable au lieu d'un tableau?
Avez-vous un lien vers une doc API pour la JSONParser bibliothèque que vous utilisez?
Je ne sais pas quel est le appels, mais je pense qu'il devrait être quelque chose comme: JSONParser.parse(incomingJsonResponse).getObject("d").getArray() ou JSONParser.parse(incomingJsonResponse).getArray("d")
OriginalL'auteur RMorrisey