gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:06:39 25 4
gpt4 key购买 nike

我正在尝试将以下 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com