Comparaison String avec une valeur d'un JSONObject

Rayan958 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -  
Rayan958 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   1
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   1
 
J aurais aimé moi aussi utilisé ton code
0
Rayan958 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1
 
Il est beaucoup plus simple à géré
0