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?

War es hilfreich?

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);)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top