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 -
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
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é).
Merci à vous (j'espère ne pas avoir été trop répétitif )
EDIT : Ajout du LANGAGE dans les balises de code
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:
- Comparaison String avec une valeur d'un JSONObject
- Comparaison million milliard - Accueil - Technologies
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Valeur ascii - Guide
- Cannot access offset of type string on string - Forum PHP
- Logiciel comparaison photo gratuit - Télécharger - Photo & Graphisme
1 réponse
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.
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.
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 !