如何使用Jackson来反序列化对象数组
Jackson数据绑定文档表明Jackson支持反序列化“所有受支持类型的数组”,但是我无法确定确切的语法。
对于单个对象,我可以这样做:
//json input
{"id" : "junk","stuff" : "things"
}//Java
MyClass instance = objectMapper.readValue(json, MyClass.class);
现在,对于数组,我想这样做:
//json input
[{"id" : "junk","stuff" : "things"
},
{"id" : "spam","stuff" : "eggs"
}]//Java
List<MyClass> entries = ?
有人知道是否有不可思议的命令吗? 如果没有,那么解决方案是什么?
#1楼
从Eugene Tskhovrebov
List<MyClass> myObjects = Arrays.asList(mapper.readValue(json, MyClass[].class))
这个解决方案似乎对我来说是最好的
#2楼
try {ObjectMapper mapper = new ObjectMapper();JsonFactory f = new JsonFactory();List<User> lstUser = null;JsonParser jp = f.createJsonParser(new File("C:\\maven\\user.json"));TypeReference<List<User>> tRef = new TypeReference<List<User>>() {};lstUser = mapper.readValue(jp, tRef);for (User user : lstUser) {System.out.println(user.toString());}} catch (JsonGenerationException e) {e.printStackTrace();
} catch (JsonMappingException e) {e.printStackTrace();
} catch (IOException e) {e.printStackTrace();
}
#3楼
对于通用实现:
public static <T> List<T> parseJsonArray(String json,Class<T> classOnWhichArrayIsDefined) throws IOException, ClassNotFoundException {ObjectMapper mapper = new ObjectMapper();Class<T[]> arrayClass = (Class<T[]>) Class.forName("[L" + classOnWhichArrayIsDefined.getName() + ";");T[] objects = mapper.readValue(json, arrayClass);return Arrays.asList(objects);
}
#4楼
首先创建一个线程安全的ObjectReader实例。
ObjectMapper objectMapper = new ObjectMapper();
ObjectReader objectReader = objectMapper.reader().forType(new TypeReference<List<MyClass>>(){});
然后使用它:
List<MyClass> result = objectReader.readValue(inputStream);
#5楼
这是一个可以转换json2object或Object2json的实用程序,无论您的pojo(实体T)如何
import java.io.IOException;
import java.io.StringWriter;
import java.util.List;import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;/*** * @author TIAGO.MEDICI* */
public class JsonUtils {public static boolean isJSONValid(String jsonInString) {try {final ObjectMapper mapper = new ObjectMapper();mapper.readTree(jsonInString);return true;} catch (IOException e) {return false;}}public static String serializeAsJsonString(Object object) throws JsonGenerationException, JsonMappingException, IOException {ObjectMapper objMapper = new ObjectMapper();objMapper.enable(SerializationFeature.INDENT_OUTPUT);objMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);StringWriter sw = new StringWriter();objMapper.writeValue(sw, object);return sw.toString();}public static String serializeAsJsonString(Object object, boolean indent) throws JsonGenerationException, JsonMappingException, IOException {ObjectMapper objMapper = new ObjectMapper();if (indent == true) {objMapper.enable(SerializationFeature.INDENT_OUTPUT);objMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);}StringWriter stringWriter = new StringWriter();objMapper.writeValue(stringWriter, object);return stringWriter.toString();}public static <T> T jsonStringToObject(String content, Class<T> clazz) throws JsonParseException, JsonMappingException, IOException {T obj = null;ObjectMapper objMapper = new ObjectMapper();obj = objMapper.readValue(content, clazz);return obj;}@SuppressWarnings("rawtypes")public static <T> T jsonStringToObjectArray(String content) throws JsonParseException, JsonMappingException, IOException {T obj = null;ObjectMapper mapper = new ObjectMapper();obj = mapper.readValue(content, new TypeReference<List>() {});return obj;}public static <T> T jsonStringToObjectArray(String content, Class<T> clazz) throws JsonParseException, JsonMappingException, IOException {T obj = null;ObjectMapper mapper = new ObjectMapper();mapper = new ObjectMapper().configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);obj = mapper.readValue(content, mapper.getTypeFactory().constructCollectionType(List.class, clazz));return obj;}
#6楼
首先创建一个映射器:
import com.fasterxml.jackson.databind.ObjectMapper;// in play 2.3
ObjectMapper mapper = new ObjectMapper();
作为数组:
MyClass[] myObjects = mapper.readValue(json, MyClass[].class);
作为列表:
List<MyClass> myObjects = mapper.readValue(jsonInput, new TypeReference<List<MyClass>>(){});
指定列表类型的另一种方法:
List<MyClass> myObjects = mapper.readValue(jsonInput, mapper.getTypeFactory().constructCollectionType(List.class, MyClass.class));
如何使用Jackson来反序列化对象数组相关推荐
- Jackson获取某个子节点的值并将其转化为Java的对象数组
这里的Json数据很复杂,里面有好几层,而且其中 的子节点是一个数组,在这里,需要将数组内容封装为Java的数组对象: Json的内容: {"tbk_dg_item_coupon_get_r ...
- Jackson之ObjectMapper对象的使用
文章目录 1 简介 2 Jackson的数据绑定 3 Jackson ObjectMapper对象示例 4 反序列化 ObjectMapper从JSON属性匹配到Java属性的过程 从JSON字符串读 ...
- C#序列化反序列化对象为base64字符串
2019独角兽企业重金招聘Python工程师标准>>> 之所以序列化为base64 字符串 方便传输,可存储在本地 也可以是服务器 public class Serializer{p ...
- store 存取数据数组对象_如何从Firestore文档中获取对象数组
我在Firestore中有一个如下所示的数据结构: 父POJO是:public class Restaurant { private Double distance; private GeoPoint ...
- 使用Jackson忽略JSON对象上的新字段[复制]
本文翻译自:Ignoring new fields on JSON objects using Jackson [duplicate] This question already has an ans ...
- Json:前台对象数组传到后台解析
前台代码 datalist是类似这样的对象数据: var datalist= new Array(); for ( var i = 1; i <= bookCount; i++) { var o ...
- json 解析 转java对象数组对象数组对象_json字符串转java对象数组
需要引入json-lib-2.2-jdk15.jar和ezmorph-1.0.6.jar包 String itemStar = request.getParameter("itemStar& ...
- js 对象深拷贝、对象数组深拷贝的几种方法总结
写前端的时候经常会遇到对象的拷贝,一般我们会用到深拷贝,深拷贝就是完完整整的将一个对象从内存中拷贝一份出来,放到另一块新开辟的内存中去.向下面这种赋值是浅拷贝,a.b都是对同一块内存进行引用,a.b哪 ...
- java byte序列化,java对象序列化byte[] and byte[]反序列化对象--转
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
最新文章
- 别再叫我 Sql boy!
- 如何让制定的计划实施起来
- unity 关闭自己脚本_unity中使用代码控制脚本的开启和关闭 enabled
- bai的字怎么写_硬笔书法的连笔字应该要怎么写?
- mysql8.0新用户无法连接_mysql 8.0.16 Linux新建用户无法登录
- 教你如何监控 Java 线程池运行状态
- NOI-砝码称重v2 多重背包 生成函数
- tomcat是否有必要配置环境变量(摘)
- 木兰编程语言重现——范围语法“下限..上限 by 间隔”,重构
- RDMA over TCP的协议栈工作过程浅析
- 软件设计模式期末大作业——可乐商城管理系统
- GIS空间分析 栅格数据分析3 可达性分析
- linux怎么设置文件访问权限,Linux文件和目录访问权限设置
- 新猿木子李:0基础学python培训教程 Python操作日期
- 第二章 Spring MVC入门 —— 跟开涛学SpringMVC
- cmake CMAKE_CXX_COMPILER_VERSION 检查失败
- foreign 磁盘阵列_X3650M4 磁盘阵列
- python 一键下载酷狗歌单
- 前端开发们最喜欢使用的一款快速吸色软件----ColorSnapper
- 312页18万字数字化校园总体建设方案