繁体   English   中英

带有GSON的Android嵌套JSON

[英]Android Nested JSON with GSON

我是JSON / GSON的新手,如果这是一个非常简单的问题,我深表歉意。 我一直在尝试使用GSON在Android中创建嵌套的JSON。

这是我要创建的内容:

{"choice": {"question_id":"1", "answer_id":"2", "survey_id":"1"}}

但是,与我的Android代码一起输出的内容在括号内带有括号,并带有许多其他\\:

{"choice":"{\"question_id\":\"1\",\"survey_id\":\"1\",\"answer_id\":\"1\"}"}

这是我生成JSON的方法:

Map<String, String> choice = new HashMap<String, String>();
        choice.put("question_id", "1");
        choice.put("answer_id", "1");
        choice.put("survey_id", "1");
        String json = new GsonBuilder().create().toJson(choice, Map.class);

        Map<String, String> choices = new HashMap<String, String>();
        choices.put("choice", json);
        String jsonChoice = new GsonBuilder().create().toJson(choices, Map.class);
        Log.i("JSON", "JSON is: " + jsonChoice);

有没有更好的方法来创建嵌套的JSON对象? 反斜杠实际上还能做什么吗? jsonlint.com说json是有效的,但是当我使用它发布到服务器时它似乎不起作用。

提前致谢!

编辑:

我发现了为什么Gson.toJson将一个通用字段序列化为一个空的JSON对象 ,其中提到了对通用类型进行序列化和反序列化 这表明Map.class无法工作,因为它没有参数化,或者说Gson不知道它是Map。 所以这是我更新的代码:

Type listType = (Type) new TypeToken<Map<String, String>>() {}.getType();

        Map<String, String> choice = new HashMap<String, String>();
        choice.put("question_id", "1");
        choice.put("answer_id", "1");
        choice.put("survey_id", "1");
        String json = new GsonBuilder().create().toJson(choice, listType);

        Map<String, String> choices = new HashMap<String, String>();
        choices.put("choice", json);
        String jsonChoice = new GsonBuilder().create().toJson(choices, listType);
        Log.i("JSON", "JSON is: " + jsonChoice); 

但不幸的是,它仍然提供与以前相同的JSON输出。

我尝试使用Gson创建json对象或将json解码为javabean,并成功获取所需的结果,这是我尝试的方法:

public class Choice {
    private ChoiceDetail choice;
    public Choice(ChoiceDetail choice) {
        super();
        this.choice = choice;
    }

}

class ChoiceDetail{
    private String question_id;
    private String answer_id;
    private String survey_id;
    public ChoiceDetail(String question_id, String answer_id, String survey_id) {
        super();
        this.question_id = question_id;
        this.answer_id = answer_id;
        this.survey_id = survey_id;
    }

}

public class TestGson {

    public static void main(String[] args) {
        ChoiceDetail detail = new ChoiceDetail("1","2","3");
        Choice choice = new Choice(detail);
        Gson g = new Gson();
        String json = g.toJson(choice);
        System.out.println(json);
    }
}

我已经对Gson进行了有关嵌套对象,嵌套列表的测试,似乎当您从Object生成json字符串时,不需要的只是new Gson()。toJson(object)。(即使您的对象具有嵌套的List属性!)仅当您尝试生成Json的List时,才需要使用TypeToken。

简而言之,用Gson lib生成json String就像这样:

String json = new Gson().toJson(object or List<object>)

将json字符串解码为对象就像这样

对于对象:

ModelA modela  = g.fromJson(json, ModelA.class);

对于列表:

List<ModelA> list = g.fromJson(json, new TypeToken<List<ModelA>>(){}.getType());

您可以在带有Gson lib的JavaSE中自己尝试。 真的很容易使用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM