2011-07-08 7 views
2

Je suis nouveau à GSON et je suis vraiment du mal à analyser ces données:Java Gson - aide-moi parse mon JSON

{ 
    "0":{ 
     "county":"Carlow", 
     "coords":{ 
     "lat":"52.72465", 
     "lng":"-6.92963" 
     } 
    }, 
    "1":{ 
     "county":"Cavan", 
     "coords":{ 
     "lat":"53.9011", 
     "lng":"-7.34436" 
     } 
    }, 
    "2":{ 
     "county":"Clare", 
     "coords":{ 
     "lat":"52.73629", 
     "lng":"-8.97583" 
     } 
    }, 
    "3":{ 
     "county":"Cork", 
     "coords":{ 
     "lat":"51.78823", 
     "lng":"-8.46771" 
     } 
    }, 
    "4":{ 
     "county":"Dublin North County", 
     "coords":{ 
     "lat":"51.78823", 
     "lng":"-6.174316" 
     } 
    }, 
    "5":{ 
     "county":"Dublin South County", 
     "coords":{ 
     "lat":"53.272605", 
     "lng":"-6.166077" 
     } 
    }, 
    "6":{ 
     "county":"Dublin 1", 
     "coords":{ 
     "lat":"53.62798", 
     "lng":"-8.188635" 
     } 
    }, 
    "7":{ 
     "county":"Dublin 2", 
     "coords":{ 
     "lat":"53.352996", 
     "lng":"-6.24637" 
     } 
    }, 
    "8":{ 
     "county":"Dublin 3", 
     "coords":{ 
     "lat":"53.338166", 
     "lng":"-6.336515" 
     } 
    }, 
    "9":{ 
     "county":"Dublin 4", 
     "coords":{ 
     "lat":"53.368377", 
     "lng":"-6.18873" 
     } 
    }, 
    "10":{ 
     "county":"Dublin 5", 
     "coords":{ 
     "lat":"53.311391", 
     "lng":"-6.219978" 
     } 
    }, 
    "11":{ 
     "county":"Dublin 6", 
     "coords":{ 
     "lat":"53.385938", 
     "lng":"-6.193697" 
     } 
    }, 
    "12":{ 
     "county":"Dublin 7", 
     "coords":{ 
     "lat":"53.349219", 
     "lng":"-6.289244" 
     } 
    }, 
    "13":{ 
     "county":"Dublin 8", 
     "coords":{ 
     "lat":"53.350221", 
     "lng":"-6.282517" 
     } 
    }, 
    "14":{ 
     "county":"Dublin 9", 
     "coords":{ 
     "lat":"53.351576", 
     "lng":"-6.284523" 
     } 
    }, 
    "15":{ 
     "county":"Dublin 10", 
     "coords":{ 
     "lat":"53.3866058", 
     "lng":"-6.23542" 
     } 
    }, 
    "16":{ 
     "county":"Dublin 11", 
     "coords":{ 
     "lat":"53.342557", 
     "lng":"-6.358278" 
     } 
    }, 
    "17":{ 
     "county":"Dublin 12", 
     "coords":{ 
     "lat":"53.34968", 
     "lng":"-6.24723" 
     } 
    }, 
    "18":{ 
     "county":"Dublin 13", 
     "coords":{ 
     "lat":"53.33d3918" 
     } 
    }, 
    "19":{ 
     "county":"Dublin 15", 
     "coords":{ 
     "lat":"53.382076", 
     "lng":"-6.366707" 
     } 
    }, 
    "20":{ 
     "county":"Dublin 16", 
     "coords":{ 
     "lat":"53.382076", 
     "lng":"-6.366707" 
     } 
    }, 
    "21":{ 
     "county":"Dublin 17", 
     "coords":{ 
     "lat":"53.310775", 
     "lng":"-6.242981" 
     } 
    }, 
    "22":{ 
     "county":"Dublin 18", 
     "coords":{ 
     "lat":"53.407485", 
     "lng":"-6.205215" 
     } 
    }, 
    "23":{ 
     "county":"Dublin 20", 
     "coords":{ 
     "lat":"53.407485", 
     "lng":"-6.205215" 
     } 
    }, 
    "24":{ 
     "county":"Dublin 22", 
     "coords":{ 
     "lat":"53.355403", 
     "lng":"-6.371452" 
     } 
    }, 
    "25":{ 
     "county":"Dublin 24", 
     "coords":{ 
     "lat":"53.299391", 
     "lng":"-6.390263" 
     } 
    }, 
    "26":{ 
     "county":"Galway", 
     "coords":{ 
     "lat":"53.17477", 
     "lng":"-9.03625" 
     } 
    }, 
    "27":{ 
     "county":"Kerry", 
     "coords":{ 
     "lat":"52.1554", 
     "lng":"-9.69269" 
     } 
    }, 
    "28":{ 
     "county":"Kildare", 
     "coords":{ 
     "lat":"53.159829", 
     "lng":"-6.908998" 
     } 
    }, 
    "29":{ 
     "county":"Kilkenny", 
     "coords":{ 
     "lat":"52.54296", 
     "lng":"-7.23175" 
     } 
    }, 
    "30":{ 
     "county":"Laois", 
     "coords":{ 
     "lat":"52.88571", 
     "lng":"-7.31689" 
     } 
    }, 
    "31":{ 
     "county":"Lietrim", 
     "coords":{ 
     "lat":"53.88815", 
     "lng":"-8.07495" 
     } 
    }, 
    "32":{ 
     "county":"Limerick", 
     "coords":{ 
     "lat":"52.55465", 
     "lng":"-8.65448" 
     } 
    }, 
    "33":{ 
     "county":"Longford", 
     "coords":{ 
     "lat":"53.61695", 
     "lng":"-7.77832" 
     } 
    }, 
    "34":{ 
     "county":"Louth", 
     "coords":{ 
     "lat":"53.92699", 
     "lng":"-6.53893" 
     } 
    }, 
    "35":{ 
     "county":"Mayo", 
     "coords":{ 
     "lat":"53.74546", 
     "lng":" -9.29169" 
     } 
    }, 
    "36":{ 
     "county":"Meath", 
     "coords":{ 
     "lat":"53.45371", 
     "lng":" -6.7923" 
     } 
    }, 
    "37":{ 
     "county":"Monaghan", 
     "coords":{ 
     "lat":"54.13831", 
     "lng":"-6.97083" 
     } 
    }, 
    "38":{ 
     "county":"Offaly", 
     "coords":{ 
     "lat":"53.15501", 
     "lng":"-7.74261" 
     } 
    }, 
    "39":{ 
     "county":"Roscommon", 
     "coords":{ 
     "lat":"53.5762", 
     "lng":" -8.19855" 
     } 
    }, 
    "40":{ 
     "county":"Sligo", 
     "coords":{ 
     "lat":"54.16887", 
     "lng":"-8.47321" 
     } 
    }, 
    "41":{ 
     "county":"Tipperary", 
     "coords":{ 
     "lat":"52.36386", 
     "lng":"-8.16833" 
     } 
    }, 
    "42":{ 
     "county":"Waterford", 
     "coords":{ 
     "lat":"52.10988", 
     "lng":"-7.12189" 
     } 
    }, 
    "43":{ 
     "county":"Westmeath", 
     "coords":{ 
     "lat":"53.34727", 
     "lng":"-7.46521" 
     } 
    }, 
    "44":{ 
     "county":"Wexford", 
     "coords":{ 
     "lat":"52.2278", 
     "lng":"-6.48193" 
     } 
    }, 
    "45":{ 
     "county":"Wicklow", 
     "coords":{ 
     "lat":"53.08286", 
     "lng":"-6.07904" 
     } 
    } 
} 

Voici ce que j'ai sofar, mais je pense qu'il est mal ...

public class GPSObject { 
     private String county; 
     private Coords coords; 
     GPSObject() { 
      // no-args constructor 
     } 
     public class Coords{ 
      public String lat; 
      public String lng; 
      public Coords() { 
       // No args constructor for B 
      } 
     } 
    } 


Gson gson=new Gson(); 
GPSObject obj2=gson.fromJson(response,GPSObject.class); 

Voici une erreur que je reçois:

> 07-08 09:26:08.731: 
> ERROR/AndroidRuntime(26763): FATAL 
> EXCEPTION: main 07-08 09:26:08.731: 
> ERROR/AndroidRuntime(26763): 
> java.lang.RuntimeException: No-args 
> constructor for class 
> ie.clarity.ShowJobsOnMap$GPSObject 
> does not exist. Register an 
> InstanceCreator with Gson for this 
> type to fix this problem. 07-08 
> 09:26:08.731: 
> ERROR/AndroidRuntime(26763): atcom.google.gson.MappedObjectConstructor.constructWithNoArgConstructor(MappedObjectConstructor.java:64) 
> 07-08 09:26:08.731: 
> ERROR/AndroidRuntime(26763):  at 
> com.google.gson.MappedObjectConstructor.construct(MappedObjectConstructor.java:53) 
> 07-08 09:26:08.731: 
> ERROR/AndroidRuntime(26763):  at 
>   com.google.gson.JsonObjectDeserializationVisitor.constructTarget(JsonObjectDeserializationVisitor.java:41) 
> 07-08 09:26:08.731: 
> ERROR/AndroidRuntime(26763):  at 
> com.google.gson.JsonDeserializationVisitor.getTarget(JsonDeserializationVisitor.java:56) 
> 07-08 09:26:08.731: 
> ERROR/AndroidRuntime(26763):  at 
> com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:101) 

quelqu'un peut-il s'il vous plaît me diriger dans la bonne direction?

Un grand merci à l'avance,

Répondre

2

J'ai essayé d'analyser ce JSON sans utiliser le GSON et j'ai été capable d'analyser cette chaîne JSON. S'il vous plaît essayez ceci aussi comme une solution alternative. Je détaille un extrait du code que j'ai utilisé pour analyser cette chaîne:

for(int i=0; i<46; i++){ 
      try { 
       JSONObject jsonObject = new JSONObject(<string to be parsed>); 
       String first   = jsonObject.getString(Integer.toString(i)); 
       JSONObject jsonObject1 = new JSONObject(first); 
       String country   = jsonObject1.getString("county"); 
       System.out.println("country="+country); 
       String cod    = jsonObject1.getString("coords"); 
       JSONObject jsonObject2 = new JSONObject(cod); 
       String lat    = jsonObject2.getString("lat"); 
       System.out.println("lat="+lat); 
       String lng    = jsonObject2.getString("lng"); 
       System.out.println("lng="+lng); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
+0

Merci beaucoup! J'étais pétrifié sur Gson. – Eamorr

2

No-args constructor for class ie.clarity.ShowJobsOnMap$GPSObject does not exist indique le constructeur est introuvable, très probablement parce que ce n'est pas visible dans votre cas. Ajouter le mot-clé public au constructeur: public GPSObject() { ... } au lieu de GPSObject() { ... }

Edit: la classe GPSObject semble être niché dans ShowJobsOnMap comme indiqué par le message d'erreur. Vous passez maintenant GPSObject.class à GSON, mais pour construire un objet d'une classe imbriquée non statique, vous devez d'abord avoir un objet de la classe englobante. Pour résoudre cela, vous devez déclarer la classe imbriquée statique et ainsi supprimer la relation spéciale entre la classe imbriquée et la classe englobante. La classe englobante a alors juste la fonction d'un espace de noms pour le point de vue de la classe imbriquée.

+0

Hey, merci pour la réponse. J'ai mon GPSObject défini comme suit: '' 'public class GPSObject { \t \t public String comté; \t \t coords publics de Coords; \t \t GPSObject() { \t \t \t // no-args constructeur \t \t} \t \t public class Coords { \t \t public String latitude; \t \t public String lng; \t \t Coords publiques() {// \t \t Aucun constructeur args B \t \t}} \t \t \t} '' 'Tout est public pour autant que je peux voir. – Eamorr

+0

Pas pour vous problème réel, mais juste un conseil, je voudrais lire les coordonnées de json comme Double et les stocker dans votre classe comme GeoPoint. Si mes pensées sont fausses, la correction est la bienvenue;) – iDroid

+0

@Eamorr - Non, le constructeur GPSObject n'est pas public mais a un accès par défaut. Ainsi, il n'est pas visible par GSON. – Thomas

1

Voir si cela peut vous aider à Getting data from JSON

Pouvez-vous poster les codes de vos classes dans votre poste principal?

+0

Salut Chin, merci pour la réponse. Je pense que je devrais utiliser JSONObject plutôt que Gson - c'est un peu plus simple et je n'ai pas besoin de définir une structure de données dans une classe séparée? – Eamorr

+0

Salut Eamorr, la "beauté" de GSON est le code de la chaudière que vous n'avez pas besoin d'écrire pour pouvoir mapper les données de votre chaîne JSON vers votre objet de domaine (Car, Bus, Person). Cela dépend aussi de vos vues ou de vos besoins, certains voudraient avoir des objets de domaine, et GSON mappe les données pour eux, certains préfèreraient avoir des objets génériques comme JSONObject. –

2

Voici une approche simple utilisant Gson.

import java.io.FileReader; 
import java.lang.reflect.Type; 
import java.util.Map; 

import com.google.gson.Gson; 
import com.google.gson.reflect.TypeToken; 

public class Foo 
{ 
    public static void main(String[] args) throws Exception 
    { 
    Gson gson = new Gson(); 
    Type gpsMapType = new TypeToken<Map<Integer, GPSObject>>() {}.getType(); 
    Map<Integer, GPSObject> gpsObjects = gson.fromJson(new FileReader("input.json"), gpsMapType); 
    System.out.println("GPSObjects Count: " + gpsObjects.size()); 
    for (Integer key : gpsObjects.keySet()) 
    { 
     GPSObject gpsObject = gpsObjects.get(key); 
     System.out.printf("%d: {county: %s, coords:{lat:%s, %s}}\n", 
     key, gpsObject.county, gpsObject.coords.lat, gpsObject.coords.lng); 
    } 
    } 
} 

class GPSObject 
{ 
    String county; 
    Coords coords; 
} 

class Coords 
{ 
    String lat; 
    String lng; 
} 

Sortie:

GPSObjects Count: 46 
0: {county: Carlow, coords:{lat:52.72465, -6.92963}} 
1: {county: Cavan, coords:{lat:53.9011, -7.34436}} 
2: {county: Clare, coords:{lat:52.73629, -8.97583}} 
3: {county: Cork, coords:{lat:51.78823, -8.46771}} 
...