Question

Je me demandais, compte tenu de ce qui suit JSON, comment je peux produire une instance de ResultSet, qui portent Query ppb valeur?

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

À l'heure actuelle, voici ce que je reçois:

{"ResultSet":{"Query":"ppb"}}
{}
null

Sans modifier la chaîne, comment puis-je obtenir un objet Java correct?

Était-ce utile?

La solution

Essayez first pour construire un nouvel objet, gson.toJson(object) d'appel, et voyez le résultat.

Je n'ai pas gson, mais jackson (un autre à JSON-objet mappeur) imprime ceci:

{"Query":"ppb"}

Alors, vous ne comprennent pas le nom de la classe. En fait, le guide utilisateur gson donne un exemple montrant exactement cela. Regardez le BagOfPrimitives.

(et une note finale - en Java, la pratique acceptée est que les variables sont en minuscules - à savoir query plutôt que Query)

Mise à jour Si vous vraiment ne peut pas changer l'entrée JSON, vous pouvez mettre en miroir la structure de cette façon:

public static class Holder {
    public ResultSet ResultSet;
}

public static class ResultSet {
    public String Query;
}

(et puis utilisez Holder h = gson.fromJson(s, Holder.class);)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top