Comparaison String avec une valeur d'un JSONObject

Fermé
Rayan958 Messages postés 32 Date d'inscription jeudi 31 décembre 2015 Statut Membre Dernière intervention 8 janvier 2016 - Modifié par jordane45 le 6/01/2016 à 01:22
Rayan958 Messages postés 32 Date d'inscription jeudi 31 décembre 2015 Statut Membre Dernière intervention 8 janvier 2016 - 6 janv. 2016 à 13:59
Bonsoir tout le monde,

Je vous explique mon problème: Je crée un fichier JSON (JSONObject) à partir d'un fichier texte. A partir de ce fichier dans ma méthode getDataCountryCode(), j'aimerais récupérer les informations présentes dans la fonction set d'une donnée présente dans mon JSONObject qui correspond au paramètre ISO3166_1_Alpha_2 dans le fichier (c'est à dire comparer ma variable en paramètre avec uniquement les valeurs de ISO3166_1_Alpha_2 et retourner les informations correspondantes).

Voici la structure de mon fichier, j'ai affiché l'ArrayList


List:{"NDC":" "
,"ISO3166_1_Alpha_3":"ZMB"
,"is_independent":"Yes"
,"CC":"260"
,"name":"Zambia"
,"lng":"30"
,"ITU_E212":"645"
,"lat":"-15"
,"ISO3166_1_Alpha_2":"ZM"
}
18788 [http-bio-8080-exec-5] INFO main.java.CountriesUtil - List:{"NDC":" "
,"ISO3166_1_Alpha_3":"ZWE"
,"is_independent":"Yes"
,"CC":"263"
,"name":"Zimbabwe"
,"lng":"30"
,"ITU_E212":"648"
,"lat":"-20"
,"ISO3166_1_Alpha_2":"ZW"
}


Par exemple, dans mon get j'ai en variable "ZM", j'aimerais afficher : [ { "ISO3166_1_Alpha_2":"ZM", "ITU_E212":"645", "Dialing_Code":"260" } ] comme indiqué dans la fonction set. (j'aimerais comparer qu'avec les valeurs d'ISO3166_1_Alpha_2 comme ça aucune ambiguïté).

 private static final JSONArray ja =  new JSONArray();
    private static JSONObject jo = new JSONObject();
 private static final Hashtable<String, String> data = new Hashtable<String, String>();
 
private static void set(String key, JSONObject jo) {
  data.put(key, "[ \n { \n \"ISO3166_1_Alpha_2\":\"" + (String) jo.get("ISO3166_1_Alpha_2") + "\"," 
                    + "\n\"ITU_E212\":\"" + (String) jo.get("ITU_E212") + "\","
                    + "\n\"Dialing_Code\":\"" + (String) jo.get("CC") + "\"\n } \n ]");
 }
 
 @SuppressWarnings("unchecked")
 public static void init(ServletContext servletContext) {
  try {
 
 
   InputStream ips = servletContext.getResourceAsStream("/WEB-INF/countries.txt");
   InputStreamReader ipsr = new InputStreamReader(ips);
   BufferedReader br = new BufferedReader(ipsr);
   String ligne;
   boolean first = true;
   String[] keys = null;
   String[] values = null;
 
   // create json
   while ((ligne = br.readLine()) != null) {
    ligne = encode(ligne);
    if (first) {
     first = false;
     keys = ligne.split(";");
     for (int i = 0; i < keys.length; i++)
      logger.info(keys[i]);
 
    } else {
     values = ligne.split(";");
     jo = new JSONObject();
     for (int i = 0; i < keys.length; i++) {
      jo.put(keys[i], values[i]);
     }
     ja.add(jo);
     logger.info(jo.toJSONString());
    }
   }
   nbCountries = ja.size();
 
   for (int i = 0; i < ja.size(); i++) {
    jo = (JSONObject) ja.get(i);
    String CC = (String) jo.get("CC");
    String NDC = (String) jo.get("NDC");
    if (!NDC.isEmpty()) {
     String[] NDCs = NDC.split(",");
     for (int j = 0; j < NDCs.length; j++) {
      String CCNDC = CC + NDCs[j];
      logger.info("CCNDC: " + CCNDC);
      CCNDC = CCNDC.trim();
      if (CCNDC.length() > size)
       size = CCNDC.length() + 1;
      set(CCNDC, jo);
     }
    } else {
     set(CC, jo);
     logger.info("CCNDC: " + CC);
    }
   }
 
   br.close();
  } catch (Exception e) {
   logger.info("Could not load country file",e);
  }
 }
 
public static String getDataCountryCode(String charac) {
  for(int i = 0; i< ja.size(); i++){
   logger.info("List:" + ja.get(i));
   if (ja.equals(charac)) {
    return data.get(charac);
   }
  }
 
  return null;
 }


Merci à vous (j'espère ne pas avoir été trop répétitif )



EDIT : Ajout du LANGAGE dans les balises de code
A voir également:

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
6 janv. 2016 à 11:36
Bonjour,

Comme je te l'ai montré - code à l'appui - dans la discussion précédente, tu ne dois pas construire ton fichier JSON à la main, mais utiliser le mapping automatique sur les bean.

Il ne faut pas comparer deux JSON, mais deux beans. C'est plus simple, plus efficace, et plus fiable.

NB. Pour parser ton fichier je t'avais également fourni une méthode parseCountry qui fait la conversion de ton fichier texte vers le bean.
0
Rayan958 Messages postés 32 Date d'inscription jeudi 31 décembre 2015 Statut Membre Dernière intervention 8 janvier 2016 1
6 janv. 2016 à 11:40
Oui j'ai vu ton code je l'ai intégré j'ai gardé les deux mais j'aimerais le faire avec mon code
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
6 janv. 2016 à 11:51
Et c'est pour ça que tu as du mal... Ton code n'est pas pensé pour faire du Java EE.
Tu t'entêtes à vouloir faire du Java SE dans un projet Java EE.

Faire un programme qui fonctionne (même au forceps) ne sert à rien, le respect de spécifications Java EE est fondamental, alors oublie ton premier code !
0
Rayan958 Messages postés 32 Date d'inscription jeudi 31 décembre 2015 Statut Membre Dernière intervention 8 janvier 2016 1
6 janv. 2016 à 13:46
Le soucis, c'est que je dois garder ce code, c'est un code fournis que j'ai pas le droit de modifier. Le code que tu m as indiquer oui je l utilise comme base de projet perso. Mais la je suis obligé d aller au forceps...
0
Rayan958 Messages postés 32 Date d'inscription jeudi 31 décembre 2015 Statut Membre Dernière intervention 8 janvier 2016 1
6 janv. 2016 à 13:59
J aurais aimé moi aussi utilisé ton code
0
Rayan958 Messages postés 32 Date d'inscription jeudi 31 décembre 2015 Statut Membre Dernière intervention 8 janvier 2016 1
6 janv. 2016 à 13:59
Il est beaucoup plus simple à géré
0