Tengo problemas para extraer la información adecuada de mi JsonObject. Actualmente, recibo este tipo de cadena de una API web:
{"start_game_items":{"11":98,"14":39,"16":120,"20":51,"27":60,"34":2,"39":5,"42":4,"44":98,"181":4,"237":13,"241":5}}La información que me interesa es cada número dentro de "", por ejemplo, "11", "14" y así sucesivamente. Estos números representan un elemento específico dentro de un juego de computadora, por lo que lo más probable es que varíen de cada cadena de la API web. Actualmente estoy haciendo esto:
// below is the String that I displayed in the top "{"start_game_item":{"11"..}"" String jsonString = itemData[0]; JsonObject jsonObject = JsonParser.parseString(jsonString).getAsJsonObject(); Set entrySet = jsonObject.entrySet(); Object[] items = entrySet.toArray(); for (Object o : items) { System.out.println(o.toString()); }Pero cuando hago esto, recibo la misma línea que se publicó anteriormente. ¿Alguien puede ver dónde me equivoco? Estoy usando la biblioteca google.gson para Java.
EDITAR: Tuve un problema algo similar anteriormente, donde recibí este tipo de Cadena:
{"1":"blink","2":"blades_of_attack","3":"broadsword","4":"chainmail","5":"claymore","6":"helm_of_iron_will","7":"javelin","8":"mithril_hammer","9":"platemail","10":"quarterstaff",..}Donde estos números de artículo se asignan a un nombre de artículo. Sin embargo, esa fue una matriz grande que resolví haciendo esto:
String jsonString = itemIDData[0]; JsonObject jsonObject = JsonParser.parseString(jsonString).getAsJsonObject(); Set keySet = jsonObject.keySet(); List<String> listJsonObjectKeys = new ArrayList<String>(); // Now we add each Key from the jsonObject to a List, so we can use the ID(Key). for (Object key : keySet) { listJsonObjectKeys.add(key.toString()); } for (int i = 0; i < keySet.size(); i++) { String currentIDString = listJsonObjectKeys.get(i); JsonElement currentItem = jsonObject.get(currentIDString); String itemName = currentItem.getAsString(); int currentID = Integer.parseInt(currentIDString); itemIDMap.put(currentID, itemName); } }Traté de usar una lógica similar al problema sobre el que publiqué, pero tengo problemas para extraer la información que necesito.
Esto es lo que quieres:
String jsonString = itemData[0]; JsonObject jsonObject = JsonParser.parseString(jsonString).getAsJsonObject(); for ( Entry e : jsonObject.getAsJsonObject( "start_game_items" ).entrySet() ) { System.out.println( e.getKey() ); }Si solo busca las claves, entonces puede ser preferible usar JsonObject#keySet() .
String jsonString = "{\"start_game_items\":{\"11\":98,\"14\":39,\"16\":120,\"20\":51,\"27\":60,\"34\":2,\"39\":5,\"42\":4,\"44\":98,\"181\":4,\"237\":13,\"241\":5}}"; JsonObject jsonObject = JsonParser.parseString(jsonString).getAsJsonObject(); Set<String> keys = jsonObject.getAsJsonObject("start_game_items").keySet(); System.out.println(keys); => [11, 14, 16, 20, 27, 34, 39, 42, 44, 181, 237, 241]