我使用了jackson先将一个List集合对象转换成json字符串后,再将json字符串转成List集合出了问题 ,报错信息如下:
Exception in thread "main" org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class com.mailbill.HDataA]: can not instantiate from JSON object (need to add/enable type information?)
at [Source: java.io.StringReader@147917a; line: 1, column: 3]
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObjectUsingNonDefault(BeanDeserializer.java:746)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:683)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:194)
at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2732)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1877)
at com.mailbill.datacore.util.JsonUtil.jacksonToCollection(JsonUtil.java:315)
at com.mailbill.TestJson.main(TestJson.java:27)
我的List集合中的对象里有一个属性也是一个集合,代码如下:
HData.java
package com.mailbill;
import java.util.List;
public class HDataA {
private String name;
private String code;
private List<HDataB> dataBList ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<HDataB> getDataBList() {
return dataBList;
}
public void setDataBList(List<HDataB> dataBList) {
this.dataBList = dataBList;
}
public HDataA(String name, String code, List<HDataB> dataBList) {
super();
this.name = name;
this.code = code;
this.dataBList = dataBList;
}
}
HDataB.java:
package com.mailbill;
public class HDataB {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public HDataB(String name) {
super();
this.name = name;
}
}
我的测试类:
package com.mailbill;
import java.util.ArrayList;
import java.util.List;
import org.aspectj.apache.bcel.generic.ARRAYLENGTH;
import com.mailbill.datacore.util.JsonUtil;
public class TestJson {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
List<HDataA> dataAlist = new ArrayList<HDataA>();
List<HDataB> dataBList = new ArrayList<HDataB>();
dataBList.add(new HDataB("hehe"));
dataBList.add(new HDataB("xixi"));
dataAlist.add(new HDataA("nidaye",
"woqu", dataBList));
String str = JsonUtil.objectToJackson(dataAlist);
System.out.println(str);
dataAlist = JsonUtil.jacksonToCollection(str, List.class, HDataA.class);
if(dataAlist ==null){
System.out.println(" dataAlist is null");
}else{
System.out.println(" ok ");
}
}
}
JsonUtion.java:
private static ObjectMapper jacksonMapper = new ObjectMapper();
public static String objectToJackson(Object obj) throws Exception {
return jacksonMapper.writeValueAsString(obj);
}
public static <T> T jacksonToCollection(String src,Class<?> collectionClass, Class<?>... valueType)
throws Exception {
JavaType javaType= jacksonMapper.getTypeFactory().constructParametricType(collectionClass, valueType);
return (T)jacksonMapper.readValue(src, javaType);
}
不知道jackson如何对这类集合进行转换?
相关推荐
在标题“Jackson对象json字符串数组集合互转”中,提到的核心概念是Jackson如何处理JSON字符串与Java集合(如List、Array等)之间的转换。下面将详细解释这一过程以及涉及的相关知识点。 1. JSON与Java对象映射: ...
标题和描述提及的是将JSON字符串转换为Java对象,特别是涉及多层嵌套和List集合的情况。这在处理复杂数据结构时非常常见,比如服务器返回的响应可能包含嵌套的对象和数组。下面我们将详细介绍如何使用Jackson库来...
在Java编程中,我们经常需要将JSON格式的数据转换为Java对象,这通常涉及到将JSON字符串转化为List泛型。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...
在JSON到Java对象的转换中,Jackson允许我们将JSON字符串解析成Java对象,包括列表(List)和映射(Map)。对于复杂列表,这意味着列表中的每个元素可能是一个复杂的Java对象,包含了嵌套的对象或者列表。例如,一个用户...
在Java中,将JSON字符串转换为Map或List是常见的操作,这在处理服务器返回的数据或者进行数据序列化时非常有用。 JSON字符串的结构主要包括对象(键值对的集合,用花括号{}包围)和数组(有序元素的集合,用方括号...
在Java开发中,处理JSON字符串通常需要借助第三方库,如Gson、Jackson或Fastjson等。本篇将深入探讨“json字符串转换插件”,重点介绍如何在项目中引入和使用这类工具。 首先,我们来理解JSON的基本结构。JSON基于...
本篇文章将深入探讨如何使用Jackson将JSON字符串转换为泛型的`List`。 首先,Jackson的核心组件是`ObjectMapper`,它是一个高度可配置的对象,能够执行序列化(对象到JSON)和反序列化(JSON到对象)。在简单的场景...
- **序列化**: Jackson 提供了 `ObjectMapper` 类,通过 `writeValueAsString()` 或 `writeValueAsBytes()` 方法可以将Java对象转换成JSON字符串或字节数组。 - **反序列化**: 使用 `readValue()` 方法,可以将...
本篇文章将详细讲解如何将string类型的XML字符串转换为JSON字符串,并介绍相关的技术知识。 首先,理解XML和JSON的基本结构是至关重要的。XML是一种树形结构的标记语言,通过标签来定义元素和属性,例如: ```xml ...
下面是一个示例代码,演示如何使用 ObjectMapper 将 JSON 字符串转换为 Map,同时启用 USE_BIG_DECIMAL_FOR_FLOATS 选项以解决科学计数法的问题: ```java ObjectMapper mapper = new ObjectMapper(); mapper....
标题中的“使用json-lib将java对象转换成json字符串”指的是在Java编程中,利用json-lib这个库来将Java对象转化为JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端...
json字符串实体bean或者List互转(gson和jackson,支持泛型),支持json的格式化,所需要的包在代码也有说明。还有少的可以告知我,谢谢
在Java开发中,将Java对象转换为JSON字符串或字符串数组是一项常见的任务,特别是在与前端交互、数据存储或者网络传输时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...
NULL 博文链接:https://bugyun.iteye.com/blog/2278997
本文将详细介绍如何在 Java 中将 List 和 Object 类型的数据转换成 JSON 格式字符串,并通过一个具体的示例来演示整个过程。 #### 一、JSON 的基本概念 JSON 是一种数据交换格式,它基于 JavaScript 的语法但独立...
接下来,我们可以使用 Jackson 的 `ObjectMapper` 来将 JSON 字符串转换为 List: ```java ObjectMapper mapper = new ObjectMapper(); String jsonStr = "[{\"name\":\"John\",\"age\":30},{\"name\":\"Jane\",\...
//将json字符串转换成jsonObject JSONObject jsonObject = JSONObject.fromObject(object); Iterator<String> ite = jsonObject.keys(); //遍历jsonObject数据,添加到Map对象 while(ite.hasNext()){ String ...
本篇将详细介绍如何利用Jackson包进行JSON字符串与POJO(Plain Old Java Object)类之间的转换,并探讨相关源码。 Jackson库主要包括三个核心模块:`jackson-core`、`jackson-annotations`和`jackson-databind`。在...
4. **输出JSON字符串**:最后通过JsonGenerator写出JSON格式的字符串。 #### 示例代码: ```java ObjectMapper mapper = new ObjectMapper(); StringWriter writer = new StringWriter(); try (JsonGenerator ...
2. **从SP加载List**:根据指定的key从SharedPreferences中获取存储的JSON字符串,再通过JSON解析库(如Gson或Jackson)将字符串反序列化回List。 3. **删除List缓存**:根据key从SharedPreferences中移除对应的...