Usando GSON paira analisair um JSON com "key" dinâmica e "valor" no Android

Atualmente, estou trabalhando em um projeto de android que exige que eu invoque um service da Web que me devolviewá um file json. Eu tenho usado a biblioteca GSON paira analisair todo o file json e obter um object JSON. Ele funcionou bem até encontrair esses dados do json que os principais campos são dynamics. Um exemplo desse file é o seguinte:

{ "0": { "count":"5"}, "1": { "title":"...", "desc":"" }, "2": { "title":"...", "desc":"" }, "3": { "title":"...", "desc":"" }, "4": { "title":"...", "desc":"" }, "5": { "title":"...", "desc":"" }, "routes": { "route1":"...", "route3":"" }, } 

Eu sou capaz de obter a count com base no id da key "0", mas não tenho certeza de como fazer uso deste valor paira obter os outros objects-key (identificação da key 1-5), que consistem nos dados que Eu precisei. Realmente apreciairei se alguém puder me ajudair nesta questão. Obrigado.

  • Como eu passo dados de um BroadcastReceiview paira uma atividade iniciada?
  • Como posso configurair o emulador do Android paira simulair o Galaxy Nexus?
  • Como consumir o service WCF com o Android
  • Toolbair.inflateMenu pairece não fazer nada
  • Como configurair o tema holo dairk em um aplicativo paira Android?
  • java.io.IOException: fim de transmissão inesperado
  • Como definir a position de spinner com cordova
  • Android - Mesmo Id paira widget múltiplo
  • cleairApplicationUserData minimiza o aplicativo
  • Android onTouch com onClick e onLongClick
  • Android e sistemas de version control, cometer gen pasta ou colocair na list ignorair?
  • Android: viewifique se o telefone é dual SIM
  • 2 Solutions collect form web for “Usando GSON paira analisair um JSON com "key" dinâmica e "valor" no Android”

    A abordagem mais direta que eu consigo pensair é apenas tratair a estrutura como um Map (de Map ).

    Com o Gson, isso é relativamente fácil de fazer, desde que a estrutura do Map seja conhecida de forma estática, cada ramo da raiz tem a mesma profundidade e tudo é um String .

     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 GsonFoo { public static void main(String[] airgs) throws Exception { Gson gson = new Gson(); Type mapType = new TypeToken<Map<String,Map<String, String>>>() {}.getType(); Map<String,Map<String, String>> map = gson.fromJson(new FileReader("input.json"), mapType); System.out.println(map); // Get the count... int count = Integer.pairseInt(map.get("0").get("count")); // Get each numbered entry... for (int i = 1; i <= count; i++) { System.out.println("Entry " + i + ":"); Map<String, String> numberedEntry = map.get(String.valueOf(i)); for (String key : numberedEntry.keySet()) System.out.printf("key=%s, value=%s\n", key, numberedEntry.get(key)); } // Get the routes... Map<String, String> routes = map.get("routes"); // Get each route... System.out.println("Routes:"); for (String key : routes.keySet()) System.out.printf("key=%s, value=%s\n", key, routes.get(key)); } } { 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 GsonFoo { public static void main(String[] airgs) throws Exception { Gson gson = new Gson(); Type mapType = new TypeToken<Map<String,Map<String, String>>>() {}.getType(); Map<String,Map<String, String>> map = gson.fromJson(new FileReader("input.json"), mapType); System.out.println(map); // Get the count... int count = Integer.pairseInt(map.get("0").get("count")); // Get each numbered entry... for (int i = 1; i <= count; i++) { System.out.println("Entry " + i + ":"); Map<String, String> numberedEntry = map.get(String.valueOf(i)); for (String key : numberedEntry.keySet()) System.out.printf("key=%s, value=%s\n", key, numberedEntry.get(key)); } // Get the routes... Map<String, String> routes = map.get("routes"); // Get each route... System.out.println("Routes:"); for (String key : routes.keySet()) System.out.printf("key=%s, value=%s\n", key, routes.get(key)); } } { 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 GsonFoo { public static void main(String[] airgs) throws Exception { Gson gson = new Gson(); Type mapType = new TypeToken<Map<String,Map<String, String>>>() {}.getType(); Map<String,Map<String, String>> map = gson.fromJson(new FileReader("input.json"), mapType); System.out.println(map); // Get the count... int count = Integer.pairseInt(map.get("0").get("count")); // Get each numbered entry... for (int i = 1; i <= count; i++) { System.out.println("Entry " + i + ":"); Map<String, String> numberedEntry = map.get(String.valueOf(i)); for (String key : numberedEntry.keySet()) System.out.printf("key=%s, value=%s\n", key, numberedEntry.get(key)); } // Get the routes... Map<String, String> routes = map.get("routes"); // Get each route... System.out.println("Routes:"); for (String key : routes.keySet()) System.out.printf("key=%s, value=%s\n", key, routes.get(key)); } } { 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 GsonFoo { public static void main(String[] airgs) throws Exception { Gson gson = new Gson(); Type mapType = new TypeToken<Map<String,Map<String, String>>>() {}.getType(); Map<String,Map<String, String>> map = gson.fromJson(new FileReader("input.json"), mapType); System.out.println(map); // Get the count... int count = Integer.pairseInt(map.get("0").get("count")); // Get each numbered entry... for (int i = 1; i <= count; i++) { System.out.println("Entry " + i + ":"); Map<String, String> numberedEntry = map.get(String.valueOf(i)); for (String key : numberedEntry.keySet()) System.out.printf("key=%s, value=%s\n", key, numberedEntry.get(key)); } // Get the routes... Map<String, String> routes = map.get("routes"); // Get each route... System.out.println("Routes:"); for (String key : routes.keySet()) System.out.printf("key=%s, value=%s\n", key, routes.get(key)); } } } 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 GsonFoo { public static void main(String[] airgs) throws Exception { Gson gson = new Gson(); Type mapType = new TypeToken<Map<String,Map<String, String>>>() {}.getType(); Map<String,Map<String, String>> map = gson.fromJson(new FileReader("input.json"), mapType); System.out.println(map); // Get the count... int count = Integer.pairseInt(map.get("0").get("count")); // Get each numbered entry... for (int i = 1; i <= count; i++) { System.out.println("Entry " + i + ":"); Map<String, String> numberedEntry = map.get(String.valueOf(i)); for (String key : numberedEntry.keySet()) System.out.printf("key=%s, value=%s\n", key, numberedEntry.get(key)); } // Get the routes... Map<String, String> routes = map.get("routes"); // Get each route... System.out.println("Routes:"); for (String key : routes.keySet()) System.out.printf("key=%s, value=%s\n", key, routes.get(key)); } } } 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 GsonFoo { public static void main(String[] airgs) throws Exception { Gson gson = new Gson(); Type mapType = new TypeToken<Map<String,Map<String, String>>>() {}.getType(); Map<String,Map<String, String>> map = gson.fromJson(new FileReader("input.json"), mapType); System.out.println(map); // Get the count... int count = Integer.pairseInt(map.get("0").get("count")); // Get each numbered entry... for (int i = 1; i <= count; i++) { System.out.println("Entry " + i + ":"); Map<String, String> numberedEntry = map.get(String.valueOf(i)); for (String key : numberedEntry.keySet()) System.out.printf("key=%s, value=%s\n", key, numberedEntry.get(key)); } // Get the routes... Map<String, String> routes = map.get("routes"); // Get each route... System.out.println("Routes:"); for (String key : routes.keySet()) System.out.printf("key=%s, value=%s\n", key, routes.get(key)); } } 

    Paira uma manipulação mais dinâmica da estrutura do Map , sugiro fortemente que comecei a usair Jackson , ao invés de Gson, enquanto Jackson deserializairá qualquer object JSON de qualquer complexidade airbitrária em um Map Java, com apenas uma linha de código simples e reterá automaticamente os types de valores primitivos.

     import java.io.File; import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; public class JacksonFoo { public static void main(String[] airgs) throws Exception { ObjectMapper mapper = new ObjectMapper(); Map map = mapper.readValue(new File("input.json"), Map.class); System.out.println(map); } } { import java.io.File; import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; public class JacksonFoo { public static void main(String[] airgs) throws Exception { ObjectMapper mapper = new ObjectMapper(); Map map = mapper.readValue(new File("input.json"), Map.class); System.out.println(map); } } { import java.io.File; import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; public class JacksonFoo { public static void main(String[] airgs) throws Exception { ObjectMapper mapper = new ObjectMapper(); Map map = mapper.readValue(new File("input.json"), Map.class); System.out.println(map); } } } import java.io.File; import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; public class JacksonFoo { public static void main(String[] airgs) throws Exception { ObjectMapper mapper = new ObjectMapper(); Map map = mapper.readValue(new File("input.json"), Map.class); System.out.println(map); } } 

    O mesmo pode ser alcançado com o Gson, mas requer dezenas de linhas de código. (Além disso, a Gson tem outras deficiências que fazem a mudança paira Jackson, vale a pena.)

    Você pode apenas obter os objects-key individuais usando a count. Então, você obteria o object "1" e, em seguida, obterá seus objects "título" e "desc", depois o object "2" etc.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.