[英]How to convert JSON to Java object
我正在使用JSON和Java类下面的Jackson Jackson。 我正在例外。 有人可以告诉我我的Java类怎么了吗
JSON:
{"name":
[
{
"field1":"value1",
"field2":"value2"
},
{
"field1":"value1",
"field2":"value2"
},
{
"field1":"value1",
"field2":"value2"
}
]
}
Java类:AnyJsonObject.java:
public class AnyJsonObject {
private List<Name> name;
public List<Name> getName() {
return name;
}
public void setName(List<Name> name) {
this.name = name;
}
}
Name.java:
public class Name {
@JsonProperty("field1")
public String fieldOne;
public String field2;
}
码:
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(json, AnyJsonObject.class);
我得到java.lang.Exception:反序列化json时发生错误
在AnyJsonObject class
您具有以下几行:
private List<Name> name;
// wrong place here
public Name getName() {
return name;
}
您将返回List<Name>
类型,但方法签名为public Name getName()
。 您应该修复返回类型:
public List<Name> getName() {
return name;
}
编辑:
我已经修改了您的源代码并使用了Jackson 2
lib。 这是我执行此任务的方法:
这是class Name
:
import com.fasterxml.jackson.annotation.JsonProperty;
public class Name {
@JsonProperty("field1")
public String fieldOne;
@JsonIgnore
public String field2; // this field will be ignored
@Override
public String toString() {
return "field1: " + fieldOne + ", field2: " + field2;
}
}
这是AnyJsonObject class
:
import java.util.List;
public class AnyJsonObject {
private List<Name> name;
public List<Name> getName() {
return name;
}
public void setName(List<Name> name) {
this.name = name;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (Name n : name) sb.append(n.toString());
return sb.toString();
}
}
这是Test class
:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
String json = "{\"name\":\n" +
" [\n" +
" {\n" +
" \"field1\":\"value1\",\n" +
" \"field2\":\"value2\"\n" +
" },\n" +
" {\n" +
" \"field1\":\"value1\",\n" +
" \"field2\":\"value2\"\n" +
" },\n" +
" {\n" +
" \"field1\":\"value1\",\n" +
" \"field2\":\"value2\"\n" +
" }\n" +
" ]\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
try {
AnyJsonObject any = mapper.readValue(json, AnyJsonObject.class);
System.out.println(any);
} catch (IOException e) {
e.printStackTrace();
}
}
}
执行输出:
栏位1:值1,栏位2:值2栏位1:值1,栏位2:值2栏位1:值1,栏位2:值2
另一种建议是使用gson( https://github.com/google/gson ),它还有助于将json读取到Java对象,例如:
public List<Class_to_create_json_of> readJsonToObject(String jsonContent) {
JSONObject json = new JSONObject();
try {
json = (JSONObject) new JSONParser().parse(jsonContent);
} catch (Exception e) {
handleException(e);
}
return gson.fromJson(json.toString(),
new TypeToken<List<Class_to_create_json_of>>() {}.getType());
}
Class_to_create_json_of是表示您的Json-字符串值的字符串字段,布尔值的布尔值等的类。例如:
{
"some_key" : "some_velue",
"some_other_key" : 1,
"some_third_key" : true
}
public class jsonContent {
private String some_key;
private int some_other_key;
privtae boolean some_third_key;
public setSome_key(String some_key) {
this.some_key = some_key;
}
public setSome_other_key(int some_other_key) {
this.some_other_key = some_other_key;
}
public setSome_third_key(boolean some_third_key) {
this.some_third_key = some_third_key;
}
public getSome_key() {
return some_key;
}
public getSome_other_key(i) {
return some_other_key;
}
public getSome_third_key() {
return some_third_key;
}
}
导入com.fasterxml.jackson.core.JsonProcessingException;导入com.fasterxml.jackson.databind.JavaType;导入com.fasterxml.jackson.databind.JsonNode;导入com.fasterxml.jackson.databind.ObjectMapper;导入com.fasterxml.jackson .databind.node.ArrayNode; public static T jsonToPojo(String jsonData,Class beanType){试试{T t = MAPPER.readValue(jsonData,beanType);返回t;} catch(Exception e){e.printStackTrace();}返回null;}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.