Qual è la struttura di JSON da leggere di google-GSON
Domanda
Mi chiedevo, dato il seguente JSON, come posso produrre un'istanza ResultSet
, che trasportano Query
valutato ppb
?
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);
}
}
Al momento, qui è ciò che ottengo:
{"ResultSet":{"Query":"ppb"}}
{}
null
Senza modificato la stringa, come posso ottenere un oggetto Java corretto?
Soluzione
Prova prima per costruire un nuovo oggetto, chiamata gson.toJson(object)
, e vedere il risultato.
Non ho GSON, ma Jackson (un altro oggetto JSON-to-mapper) Stampa questa:
{"Query":"ppb"}
Quindi, non includono il nome della classe. In realtà, il href="https://sites.google.com/site/gson/gson-user-guide" rel="nofollow"> la guida fornisce un esempio che mostra esattamente questo. Guardate la BagOfPrimitives
.
(E una nota finale - in Java, la pratica accettata è che le variabili sono in minuscolo - vale a dire query
piuttosto che Query
)
Aggiorna se davvero non può modificare l'ingresso JSON, si può rispecchiare la struttura in questo modo:
public static class Holder {
public ResultSet ResultSet;
}
public static class ResultSet {
public String Query;
}
(e quindi utilizzare Holder h = gson.fromJson(s, Holder.class);
)