(ich glaube, ich verstehe, dass die Frage ist, wie Gson zu verwenden, um eine JSON Map-Struktur auf eine Java Map
deserialisieren.)
Gson zur Zeit ein wenig mehr Art Informationen über die Map
als die Java-Klassenstruktur benötigt in der ursprünglichen Frage bietet. Anstatt zu erklären, dass randomDetails
eine einfache alte Map
ist, lassen Sie Gson wissen, dass es ein Map<String, String>
ist. Dann wird das folgende Beispiel für JSON und einfachen Deserialisierungscode wie erwartet ausgeführt.
input.json Inhalt:
{
"handle":"the handle",
"random_details":{"one":1,"too":"B","3":false,"for":5.32}
}
Foo.java:
import java.io.FileReader;
import java.util.Map;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
public class Foo
{
public static void main(String[] args) throws Exception
{
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
Gson gson = gsonBuilder.create();
MyClass myObject = gson.fromJson(new FileReader("input.json"), MyClass.class);
System.out.println(gson.toJson(myObject));
}
}
class MyClass
{
@SerializedName("handle")
String nickName;
Map<String, String> randomDetails;
}
anzumerken, dass diese alle Werte im Map
in Strings
umwandelt. Wenn Sie etwas generischeres möchten, z. B. Map<String, Object>
, oder randomDetails
ein einfaches altes Map
ohne zusätzliche Typinformationen sein muss, dann müssen Sie die benutzerdefinierte Deserialisierungsverarbeitung as described in the user guide implementieren. (Dies ist eine Situation, wo Gson leider zur Zeit nicht automatisch Java-Werte von String
oder primitive Art von JSON Primitiven erzeugen, wenn der angegebene Java-Typ einfach Object
ist. Daher ist es notwendig, die benutzerdefinierte Deserialisierung zu implementieren.)
Hier ist eine solche Beispiel.
Gson-Problem 325 adressiert einfache Deserialisierung zu Map Zögern Sie nicht, für die Implementierung unter code.google.com/p/google-gson/issues/detail?id=325 zu stimmen –