【问题标题】:JSON deserialization using GSON使用 GSON 的 JSON 反序列化
【发布时间】:2010-11-24 12:04:24
【问题描述】:

我有以下来自 url 的 json 响应:

stdClass Object
(
    [uname] => Eamorr
    [phoneNumber] => 082732938293
    [fname] => Steve
    [lname] => Hearst
    [sex] => M
    [roofSignNumber] => 230948
    [vehicleReg] => 07D2892
    [vehicleMake] => Toyota
    [vehicleModel] => Avensis
    [vehicleNumPassengers] => 4
    [profilePic] => -1
    [online] => 1
    [status] => 
    [picList] => Array
        (
        )

    [lat] => 
    [lng] => 
    [reputation] => 0.63
    [numPagesComments] => 1
    [last5comments] => Array
        (
            [0] => stdClass Object
                (
                    [comment] => hello5
                    [fromUname] => Eamorr
                    [profilePic] => -1
                    [time] => 1290254763
                    [id] => 23628mr28018onm647z2
                )

        )

)

这是我进行解析的方式:

                      Gson json=new Gson();
                      try{
                          Driver driver=json.fromJson(response,Driver.class);
                          Log.i("json",driver.profilePic);
                      }catch(JsonParseException e){
                          Log.i("error","JsonParseException");
                      }

当我运行代码时,我得到了这个错误: 错误/AndroidRuntime(823): java.lang.RuntimeException: com.project.driver.Driver$Post 类的无参数构造函数不存在。为这个类型注册一个 InstanceCreator 到 Gson 来解决这个问题。

我无法为解析定义合适的 Driver.java。当我省略“last5cmets”字段时,一切正常,只是“last5cmets”位我遇到了麻烦......

这里是 Driver.java:

public class Driver {
    public String uname="";
    public String phoneNumber="";
    public String fname="";
    public String lname="";
    public String sex="";
    public String roofSignNumber="";
    public String vehicleReg="";
    public String vehicleMake="";
    public String vehicleModel="";
    public String vehicleNumPassengers="";
    public String profilePic="";
    public String online="";
    public String status="";
    public String[] picList;
    public String lat="";
    public String lng="";
    public String reputation="";
    public String numPagesComments="";

    //having problems below this line 
    public Post[] last5comments;

    public class Post{
        public String comment="";
        public String fromUname="";
        public String profilePic="";
        public String time="";
        public String id="";
    }
}

非常感谢任何有关定义合适 Driver.java 的帮助。

提前致谢,

【问题讨论】:

    标签: android json parsing gson


    【解决方案1】:

    我已经通过查看以下内容设法解决了这个问题:

    http://sites.google.com/site/gson/gson-user-guide#TOC-Nested-Classes-including-Inner-Clas

    (关于“嵌套类(包括内部类)”的部分)

    我所要做的就是将 Post 对象设为静态。

    public static class Post{
            public String comment="";
            public String fromUname="";
            public String profilePic="";
            public String time="";
            public String id="";
        }
    

    【讨论】:

    • 正确。或者通过将其移动到单独的文件(在这种情况下没有静态)使其成为顶级类。
    猜你喜欢
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多