Gson:无法为类调用无参数构造函数 - java

尽管此主题上有多个主题。.请不要将其标记为重复。

我的pojo看起来像这样:

public class sample {


    public sample() {
        // TODO Auto-generated constructor stub
    }

    private String instructions;
    private String resource;
    private List<Map<String,String>> fields;
    private String taskid;

    private List<Map<String,String>> answer;

    public String getTaskid() {
        return taskid;
    }
    public void setTaskid(String taskid) {
        this.taskid = taskid;
    }
    public String getInstructions() {
        return instructions;
    }
    public void setInstructions(String instructions) {
        this.instructions = instructions;
    }
    public String getResource() {
        return resource;
    }
    public void setResource(String resource) {
        this.resource = resource;
    }
    public List<Map<String,String>> getFields() {
        return fields;
    }
    public void setFields(List<Map<String,String>> fields) {
        this.fields = fields;
    }
    public List<Map<String,String>> getAnswer() {
        return answer;
    }
    public void setAnswer(List<Map<String,String>> answer) {
        this.answer = answer;
    }



}

我正在做一个httpget,结果是一个Json对象数组,我尝试将其类型转换为样本,但它给出了异常。

反序列化代码段如下

sample[] temp = gsonObj.fromJson(response, sample[].class);

我得到的例外是

java.lang.RuntimeException: Unable to invoke no-args constructor for class [sample;. Register an InstanceCreator with Gson for this type may fix this problem.
    at com.google.gson.MappedObjectConstructor.constructWithAllocators(MappedObjectConstructor.java:68)
    at com.google.gson.MappedObjectConstructor.construct(MappedObjectConstructor.java:52)
    at com.google.gson.JsonObjectDeserializationVisitor.constructTarget(JsonObjectDeserializationVisitor.java:42)
    at com.google.gson.JsonDeserializationVisitor.getTarget(JsonDeserializationVisitor.java:60)
    at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:104)
    at com.google.gson.JsonDeserializationContextDefault.fromJsonObject(JsonDeserializationContextDefault.java:76)
    at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:54)
    at com.google.gson.Gson.fromJson(Gson.java:551)
    at com.google.gson.Gson.fromJson(Gson.java:498)
    at com.google.gson.Gson.fromJson(Gson.java:467)
    at com.google.gson.Gson.fromJson(Gson.java:417)
    at com.google.gson.Gson.fromJson(Gson.java:389)
    at HTTPClientUtils.getResultsFromMobileWorks(HTTPClientUtils.java:327)

您能告诉我我在哪里犯错吗?

参考方案

无法复制。但是这里有效的是:

public class Sample {

    public Sample(){}
    public int kk;
    public List<Map<String,String>> fields;


    public static void main(String[] args) {
        String s = "[{\"kk\":1, \"fields\":[{\"a\":\"a1\"}]}, {\"kk\":5}, {\"kk\":2}, {\"kk\":8}, {\"kk\":6, \"fields\":[{\"b\":\"b1\"}]}]";
        Sample[] r = new Gson().fromJson(s, Sample[].class);
        for(Sample t: r)
            System.out.println(">> " + t.kk + " " + t.fields);
    }

}

结果:

>> 1 [{a=a1}]
>> 5 null
>> 2 null
>> 8 null
>> 6 [{b=b1}]

边注:

  • 始终大写您的课程。
  • 发表评论
  • 使用Gson从JSON对象获取键名 - java

    我有一个JSON对象,我想从中获取键名并将其存储在ArrayList中。我使用了以下代码jsonData(String filename) { JsonParser parser = new JsonParser(); JsonElement jsonElement = null; try { jsonElement = parser.parse(new F…

    如何将JSON读取到Java中的通用对象列表? - java

    我必须从Web服务获取数据,我正在使用Jackson,但在使用Gson时遇到了同样的问题,单个对象没有问题,但是当我收到多个对象列表时,这对我来说并不那么容易。收到的JSON如下所示:{"country": [ {"code":"AD","nombre":"Andorr…

    与哪些运算符>>兼容 - java

    我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

    为什么Kotlin在声明为不可为空的字符串的属性中接受空值? - java

    我这样声明了data class:data class Product(val name: String = "", val price: Float = 0f) 我的代码是:val json = "{'name': null, 'price': 50.00}" val gson…

    Java:找到特定字符并获取子字符串 - java

    我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…