Was die Struktur des JSON wird von Google-Gson gelesen werden
Frage
Ich habe mich gefragt, angesichts der folgenden JSON, wie ich eine ResultSet
Instanz erzeugen kann, die Query
bewertet ppb
tragen?
package jsontest;
import com.google.gson.Gson;
/**
*
* @author yccheok
*/
public class Main {
public static class ResultSet {
public String Query;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
final String s = "{\"ResultSet\":{\"Query\":\"ppb\"}}";
System.out.println(s);
Gson gson = new Gson();
ResultSet resultSet = gson.fromJson(s, ResultSet.class);
// {}
System.out.println(gson.toJson(resultSet));
// null?
System.out.println(resultSet.Query);
}
}
Zur Zeit hier ist, was ich bekommen:
{"ResultSet":{"Query":"ppb"}}
{}
null
Ohne den String verändert, wie kann ich ein korrektes Java-Objekt bekommen?
Lösung
Versuchen Sie zuerst ein neues Objekt, rufen gson.toJson(object)
, zu konstruieren und das Ergebnis sehen.
Ich habe nicht Gson, aber Jackson (ein anderes Objekt-to-json-Mapper) druckt diese:
{"Query":"ppb"}
Also, Sie enthalten nicht die Klassennamen. Eigentlich ist die Gson Bedienungsanleitung gibt ein Beispiel zeigt genau diese. Schauen Sie sich die BagOfPrimitives
.
(Und ein letzter Hinweis - in Java, die akzeptierte Praxis ist, dass Variablen klein geschrieben werden - das heißt query
statt Query
)
Aktualisieren Wenn Sie wirklich kann nicht die json Eingabe ändern, können Sie die Struktur auf diese Weise spiegeln:
public static class Holder {
public ResultSet ResultSet;
}
public static class ResultSet {
public String Query;
}
(und verwenden Sie dann Holder h = gson.fromJson(s, Holder.class);
)