Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 转换为pojo时简单json结构引发错误_Java_Json_Jackson - Fatal编程技术网

Java 转换为pojo时简单json结构引发错误

Java 转换为pojo时简单json结构引发错误,java,json,jackson,Java,Json,Jackson,我试图将json字符串转换为java pojo,但在解析时收到以下错误: org.codehaus.jackson.map.JsonMappingException: Can not instantiate value of type [simple type, class com.json.pojo.Userdatum] from JSON String; no single-String constructor/factory method at org.codehaus.jacks

我试图将json字符串转换为java pojo,但在解析时收到以下错误:

org.codehaus.jackson.map.JsonMappingException: Can not instantiate value of type [simple type, class com.json.pojo.Userdatum] from JSON String; no single-String constructor/factory method
    at org.codehaus.jackson.map.deser.std.StdValueInstantiator._createFromStringFallbacks(StdValueInstantiator.java:379)
    at org.codehaus.jackson.map.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:268)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromString(BeanDeserializer.java:765)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:585)
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2732)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1863)
    at com.json.pojo.ParseJson.main(ParseJson.java:21)
这是我的转换代码:

package com.json.pojo;

import java.io.IOException;

import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;

public class ParseJson {

    public static void main(String args[]){

        String str = "\"userdata\": [  {\"userid\": \"user1\",\"title\": \"Next weeks preview\", \"date\": \"19/12/2013\",\"time\": \"15:00\"}";
        org.codehaus.jackson.map.ObjectMapper mapper = new org.codehaus.jackson.map.ObjectMapper();     
        mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);

        try {
            com.json.pojo.Userdatum user = mapper.readValue(str, com.json.pojo.Userdatum.class);
        } catch (JsonParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JsonMappingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
还有我的pojo:

package com.json.pojo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("com.googlecode.jsonschema2pojo")
@JsonPropertyOrder({
"userdata"
})
public class UserData {

@JsonProperty("userdata")
private List<Userdatum> userdata = new ArrayList<Userdatum>();
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("userdata")
public List<Userdatum> getUserdata() {
return userdata;
}

@JsonProperty("userdata")
public void setUserdata(List<Userdatum> userdata) {
this.userdata = userdata;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperties(String name, Object value) {
this.additionalProperties.put(name, value);
}

}


package com.json.pojo;

import java.util.HashMap;
import java.util.Map;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("com.googlecode.jsonschema2pojo")
@JsonPropertyOrder({
"userid",
"title",
"date",
"time"
})
public class Userdatum {

@JsonProperty("userid")
private String userid;
@JsonProperty("title")
private String title;
@JsonProperty("date")
private String date;
@JsonProperty("time")
private String time;
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("userid")
public String getUserid() {
return userid;
}

@JsonProperty("userid")
public void setUserid(String userid) {
this.userid = userid;
}

@JsonProperty("title")
public String getTitle() {
return title;
}

@JsonProperty("title")
public void setTitle(String title) {
this.title = title;
}

@JsonProperty("date")
public String getDate() {
return date;
}

@JsonProperty("date")
public void setDate(String date) {
this.date = date;
}

@JsonProperty("time")
public String getTime() {
return time;
}

@JsonProperty("time")
public void setTime(String time) {
this.time = time;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperties(String name, Object value) {
this.additionalProperties.put(name, value);
}

}
package com.json.pojo;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入javax.annotation.Generated;
导入com.fasterxml.jackson.annotation.JsonAnyGetter;
导入com.fasterxml.jackson.annotation.JsonAnySetter;
导入com.fasterxml.jackson.annotation.JsonInclude;
导入com.fasterxml.jackson.annotation.JsonProperty;
导入com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@生成(“com.googlecode.jsonschema2pojo”)
@JsonPropertyOrder({
“用户数据”
})
公共类用户数据{
@JsonProperty(“用户数据”)
private List userdata=new ArrayList();
私有映射additionalProperties=new HashMap();
@JsonProperty(“用户数据”)
公共列表getUserdata(){
返回用户数据;
}
@JsonProperty(“用户数据”)
public void setUserdata(列出userdata){
this.userdata=userdata;
}
@JsonAnyGetter
公共映射getAdditionalProperties(){
返回此。附加属性;
}
@JSONANYSETER
public void setAdditionalProperties(字符串名称、对象值){
this.additionalProperties.put(名称、值);
}
}
包com.json.pojo;
导入java.util.HashMap;
导入java.util.Map;
导入javax.annotation.Generated;
导入com.fasterxml.jackson.annotation.JsonAnyGetter;
导入com.fasterxml.jackson.annotation.JsonAnySetter;
导入com.fasterxml.jackson.annotation.JsonInclude;
导入com.fasterxml.jackson.annotation.JsonProperty;
导入com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@生成(“com.googlecode.jsonschema2pojo”)
@JsonPropertyOrder({
“用户ID”,
“头衔”,
“日期”,
“时间”
})
公共类用户数据{
@JsonProperty(“用户ID”)
私有字符串用户标识;
@JsonProperty(“所有权”)
私有字符串标题;
@JsonProperty(“日期”)
私有字符串日期;
@JsonProperty(“时间”)
私有字符串时间;
私有映射additionalProperties=new HashMap();
@JsonProperty(“用户ID”)
公共字符串getUserid(){
返回用户标识;
}
@JsonProperty(“用户ID”)
public void setUserid(字符串userid){
this.userid=userid;
}
@JsonProperty(“所有权”)
公共字符串getTitle(){
返回标题;
}
@JsonProperty(“所有权”)
公共无效集合标题(字符串标题){
this.title=标题;
}
@JsonProperty(“日期”)
公共字符串getDate(){
返回日期;
}
@JsonProperty(“日期”)
公共无效设置日期(字符串日期){
this.date=日期;
}
@JsonProperty(“时间”)
公共字符串getTime(){
返回时间;
}
@JsonProperty(“时间”)
公共无效设置时间(字符串时间){
这个时间=时间;
}
@JsonAnyGetter
公共映射getAdditionalProperties(){
返回此。附加属性;
}
@JSONANYSETER
public void setAdditionalProperties(字符串名称、对象值){
this.additionalProperties.put(名称、值);
}
}

生成的pojo一定有问题,但看起来正确吗?

这是可行的,出于某种原因,我需要使用@JsonProperty,尽管我的属性与json属性匹配,但我认为它们不是必需的

package com.json.pojo;

import java.io.IOException;

import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;

public class ParseJson {

    public static void main(String args[]){

        String str = "{ \"userdata\": [  {\"userid\": \"user1\",\"title\": \"Next weeks preview\", \"date\": \"19/12/2013\",\"time\": \"15:00\"} ] }";

        org.codehaus.jackson.map.ObjectMapper mapper = new org.codehaus.jackson.map.ObjectMapper();     
        mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, true);

        try {
            com.json.pojo.RequestBean user = mapper.readValue(str, com.json.pojo.RequestBean.class);

            System.out.println(user.getToAdd().size());
        } catch (JsonParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JsonMappingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

package com.json.pojo;

import java.io.Serializable;
import java.util.List;

import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonSerialize;

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class RequestBean implements Serializable {

    @JsonProperty("userdata")
    private List<SimpleBean> userdata;

    public List<SimpleBean> getToAdd() {
        return userdata;
    }

    public void setToAdd(List<SimpleBean> toAdd) {
        this.userdata = toAdd;
    }


    // constructors, getters, setters
}

package com.json.pojo;

import java.io.Serializable;

import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonSerialize;

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class SimpleBean implements Serializable {

    @JsonProperty("userid")
    private String userid;
    @JsonProperty("title")
    private String title;
    @JsonProperty("date")
    private String date;
    @JsonProperty("time")
    private String time;

    public String getUserid() {
        return userid;
    }
    public void setUserid(String userid) {
        this.userid = userid;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public String getTime() {
        return time;
    }
    public void setTime(String time) {
        this.time = time;
    }


}
package com.json.pojo;
导入java.io.IOException;
导入org.codehaus.jackson.JsonParseException;
导入org.codehaus.jackson.map.JsonMappingException;
导入org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
导入org.codehaus.jackson.annotate.JsonMethod;
导入org.codehaus.jackson.map.DeserializationConfig;
导入org.codehaus.jackson.map.ObjectMapper;
公共类解析JSON{
公共静态void main(字符串参数[]){
String str=“{\'userdata\”:[{\'userid\”:\'user1\,\'title\:\'nextweeks preview\”,\'date\“:\'19/12/2013\”,\'time\“:\'15:00\”}];
org.codehaus.jackson.map.ObjectMapper mapper=新org.codehaus.jackson.map.ObjectMapper();
configure(在未知属性上反序列化config.Feature.FAIL,true);
试一试{
com.json.pojo.RequestBean user=mapper.readValue(str,com.json.pojo.RequestBean.class);
System.out.println(user.gettoad().size());
}捕获(JSONParsee异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(JsonMappingException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
包com.json.pojo;
导入java.io.Serializable;
导入java.util.List;
导入org.codehaus.jackson.annotate.JsonIgnoreProperties;
导入org.codehaus.jackson.annotate.JsonProperty;
导入org.codehaus.jackson.map.annotate.JsonSerialize;
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown=true)
公共类RequestBean实现了可序列化{
@JsonProperty(“用户数据”)
私有列表用户数据;
公共列表getToAdd(){
返回用户数据;
}
公共无效设置为添加(列表为添加){
this.userdata=toAdd;
}
//构造函数、getter、setter
}
包com.json.pojo;
导入java.io.Serializable;
导入org.codehaus.jackson.annotate.JsonIgnoreProperties;
导入org.codehaus.jackson.annotate.JsonProperty;
导入org.codehaus.jackson.map.annotate.JsonSerialize;
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown=true)
公共类SimpleBean实现了可序列化{
@JsonProperty(“用户ID”)
私有字符串用户标识;
@JsonProperty(“所有权”)
私有字符串标题;
@JsonProperty(“日期”)
私有字符串日期;
@JsonProperty(“时间”)
私有字符串时间;
公共字符串getUserid(){
返回用户标识;
}
public void setUserid(字符串userid){
this.userid=userid;
}
公共字符串getTitle(){
返回标题;
}
公共无效集合标题(字符串标题){
this.title=标题;
}
公共字符串getDate(){