java - 使用 Jackson 将 json 数组转换为某种 Java 表示形式

标签 java json jackson

我正在尝试将以下 jsonString 结构转换为 Java 对象列表/数组:

[
    [1,21940000,1905386136,null,"KR","akshay","04/06/2017","03/06/2017",2017,9,40,"JPY",7478,"JPY",7478,"WHT (Residen",null,0,"03/06/2017","03/06/2017","20170604",null],
    [2,21940000,1903732187,null,"KR",null,"06/06/2017","05/06/2017",2017,9,40,"JPY",608547485,"JPY",608547485,"WHT (Non-Resi",null,0,"05/06/2017","05/06/2017","20170606",null],
    [3,21940000,2001898163, ............... ]
.
.
.
.
.
.
.
.
]

下面是Java代码:

ObjectMapper mapper = new ObjectMapper();
MyData[][] data = mapper.readValue(jsonString, MyData[][].class);

但是,我收到以下错误:

    com.fasterxml.jackson.databind.JsonMappingException: 
    Can not construct instance of com.org.model.MyData: 
     no String-argument constructor/factory method to deserialize from String value ('KR')
     at [Source: java.io.StringReader@1327cf05; line: 1, column: 30] (through reference chain: java.lang.Object[][0]->java.lang.Object[][4])

有人可以帮我吗?谢谢

编辑:下面是我的 POJO MyData.java 代码:

@Entity
@Table(schema = "My_Schema", name = "My_Data_Table")
@SuppressFBWarnings(value = { "EI_EXPOSE_REP", "EI_EXPOSE_REP2" }, justification = "I prefer to suppress these FindBugs warnings")

public class MyData implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -6936461726389768288L;

    public MyData() {
    super();
    }

    /**
     * @param id
     */
    public MyData(Long id) {
    super();
    this.id = id;
    }

    @Id
    private Long id;

    @Column(name = "ACCOUNT")
    private long account;
    @Column(name = "DOC_NUMBER")
    private long docNumber;
    @Column(name = "TYPE")
    private String type;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
    @Column(name = "DOC_DATE")
    private Date docDate;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
    @Column(name = "POSTING_DATE")
    private Date postingDate;
    @Column(name = "YEAR")
    private long year;
    @Column(name = "PERIOD")
    private long period;
    @Column(name = "PK")
    private long pk;
    @Column(name = "TAX_CODE")
    private String taxCode;
    @Column(name = "CCY")
    private String ccy;
    @Column(name = "DOC_CCY_AMT")
    private long docCcyAmt;
    @Column(name = "LOCAL_CCY")
    private String localCcy;
    @Column(name = "LOCAL_CCY_AMT")
    private long localCcyAmt;
    @Column(name = "TEXT")
    private String text;
    @Column(name = "DOC_HEADER_TEXT")
    private String docHeaderText;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
    @Column(name = "CLEARING_DATE")
    private Date clearingDate;
    @Column(name = "CLEARING_DOC")
    private long clearingDoc;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
    @Column(name = "ENTRY_DATE")
    private Date entryDate;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
    @Column(name = "VALUE_DATE")
    private Date valueDate;
    @Column(name = "ASSIGNMENT")
    private String assignment;
    @Column(name = "REMARKS")
    private String remarks;
    // Getters and setters to follow .....

所以,问题是我的输入 JSON 字符串是一个数组数组,我希望它采用某种 Java 表示形式,无论是 ArrayList 还是普通数组...

最佳答案

您可能缺少“MyData”类中“KR”所需的属性。在您在此处发布 MyData 类的定义之前,请先查看此代码。一定会对您有所帮助。

class Student {
   private String name;
   private int age;

   public Student(){}

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public int getAge() {
      return age;
   }

   public void setAge(int age) {
      this.age = age;
   }
   public String toString(){
      return "Student [ name: "+name+", age: "+ age+ " ]";
   }
}

并测试它

import java.io.IOException;

import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

public class JacksonTester {
   public static void main(String args[]){

      ObjectMapper mapper = new ObjectMapper();
      String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";

      //map json to student

      try{
         Student student = mapper.readValue(jsonString, Student.class);

         System.out.println(student);

         mapper.enable(SerializationConfig.Feature.INDENT_OUTPUT);
         jsonString = mapper.writeValueAsString(student);

         System.out.println(jsonString);
      }
      catch (JsonParseException e) { e.printStackTrace();}
      catch (JsonMappingException e) { e.printStackTrace(); }
      catch (IOException e) { e.printStackTrace(); }
   }
}

关于java - 使用 Jackson 将 json 数组转换为某种 Java 表示形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46417663/

相关文章:

java - 对象未从数组列表中正确删除

如果我在 while 循环中添加 if 语句,Java 缓冲读取器将停止读取行 :

ios - Parse.com - JSON 导入日期字段错误

javascript - JSON.parse 无法从字符串创建对象

java - 不加载整个对象

javascript - 使用 MongoDB/Mongoose 在 Node 中执行 HTTP POST 请求?

java - spring cache redis : LazyInitializationException failed to lazily initialize a collection, 无法初始化代理 - 无 session

java - 如何从 JSON 创建具有不同字段结构的 Java obj

json - Scala Jackson 对象映射器在 case 类中设置 null 而不是默认值

java - RxJava : async calls in a loop