Parsing JSON maps / dictionaries with Gson? Parsing JSON maps / dictionaries with Gson? json json

Parsing JSON maps / dictionaries with Gson?


Gson readily handles deserialization of a JSON object with name:value pairs into a Java Map.

Following is such an example using the JSON from the original question. (This example also demonstrates using a FieldNamingStrategy to avoid specifying the serialized name for every field, provided that the field-to-element name mapping is consistent.)

import java.io.FileReader;import java.lang.reflect.Field;import java.util.Map;import com.google.gson.FieldNamingStrategy;import com.google.gson.Gson;import com.google.gson.GsonBuilder;public class Foo{  public static void main(String[] args) throws Exception  {    GsonBuilder gsonBuilder = new GsonBuilder();    gsonBuilder.setFieldNamingStrategy(new MyFieldNamingStrategy());    Gson gson = gsonBuilder.create();    Egg egg = gson.fromJson(new FileReader("input.json"), Egg.class);    System.out.println(gson.toJson(egg));  }}class Egg{  private String mKey1;  private String mKey2;  private Map<String, String> mKey3;}class MyFieldNamingStrategy implements FieldNamingStrategy{  //Translates the Java field name into its JSON element name representation.  @Override  public String translateName(Field field)  {    String name = field.getName();    char newFirstChar = Character.toLowerCase(name.charAt(1));    return newFirstChar + name.substring(2);  }}


As far as I remember you should create separate class for each json object.Try something like this:

class Key {     @SerializedName("childKey1")    private String mchildKey1;    @SerializedName("childKey2")    private String mchildKey2;    @SerializedName("childKey3")    private String mchildKey3;}class Egg {     @SerializedName("key1")    private String mKey1;    @SerializedName("key2")    private String mKey2;    @SerializedName("key3")    private Key mKey3;}

If this is not what you expected you can write your own serialize/deserialize adapter.