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来反序列化对象数组相关推荐

  1. Jackson获取某个子节点的值并将其转化为Java的对象数组

    这里的Json数据很复杂,里面有好几层,而且其中 的子节点是一个数组,在这里,需要将数组内容封装为Java的数组对象: Json的内容: {"tbk_dg_item_coupon_get_r ...

  2. Jackson之ObjectMapper对象的使用

    文章目录 1 简介 2 Jackson的数据绑定 3 Jackson ObjectMapper对象示例 4 反序列化 ObjectMapper从JSON属性匹配到Java属性的过程 从JSON字符串读 ...

  3. C#序列化反序列化对象为base64字符串

    2019独角兽企业重金招聘Python工程师标准>>> 之所以序列化为base64 字符串 方便传输,可存储在本地 也可以是服务器 public class Serializer{p ...

  4. store 存取数据数组对象_如何从Firestore文档中获取对象数组

    我在Firestore中有一个如下所示的数据结构: 父POJO是:public class Restaurant { private Double distance; private GeoPoint ...

  5. 使用Jackson忽略JSON对象上的新字段[复制]

    本文翻译自:Ignoring new fields on JSON objects using Jackson [duplicate] This question already has an ans ...

  6. Json:前台对象数组传到后台解析

    前台代码 datalist是类似这样的对象数据: var datalist= new Array(); for ( var i = 1; i <= bookCount; i++) { var o ...

  7. json 解析 转java对象数组对象数组对象_json字符串转java对象数组

    需要引入json-lib-2.2-jdk15.jar和ezmorph-1.0.6.jar包 String itemStar = request.getParameter("itemStar& ...

  8. js 对象深拷贝、对象数组深拷贝的几种方法总结

    写前端的时候经常会遇到对象的拷贝,一般我们会用到深拷贝,深拷贝就是完完整整的将一个对象从内存中拷贝一份出来,放到另一块新开辟的内存中去.向下面这种赋值是浅拷贝,a.b都是对同一块内存进行引用,a.b哪 ...

  9. java byte序列化,java对象序列化byte[] and byte[]反序列化对象--转

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

最新文章

  1. 别再叫我 Sql boy!
  2. 如何让制定的计划实施起来
  3. unity 关闭自己脚本_unity中使用代码控制脚本的开启和关闭 enabled
  4. bai的字怎么写_硬笔书法的连笔字应该要怎么写?
  5. mysql8.0新用户无法连接_mysql 8.0.16 Linux新建用户无法登录
  6. 教你如何监控 Java 线程池运行状态
  7. NOI-砝码称重v2 多重背包 生成函数
  8. tomcat是否有必要配置环境变量(摘)
  9. 木兰编程语言重现——范围语法“下限..上限 by 间隔”,重构
  10. RDMA over TCP的协议栈工作过程浅析
  11. 软件设计模式期末大作业——可乐商城管理系统
  12. GIS空间分析 栅格数据分析3 可达性分析
  13. linux怎么设置文件访问权限,Linux文件和目录访问权限设置
  14. 新猿木子李:0基础学python培训教程 Python操作日期
  15. 第二章 Spring MVC入门 —— 跟开涛学SpringMVC
  16. cmake CMAKE_CXX_COMPILER_VERSION 检查失败
  17. foreign 磁盘阵列_X3650M4 磁盘阵列
  18. python 一键下载酷狗歌单
  19. 前端开发们最喜欢使用的一款快速吸色软件----ColorSnapper
  20. 312页18万字数字化校园总体建设方案

热门文章

  1. windows的阻塞和非阻塞Socket编程
  2. CMD命令操作MySql数据库详解
  3. 第十三周项目二-动物这样叫(1)
  4. setFilters使用方法
  5. Java并发之公平锁
  6. (0065)iOS开发之工具条UIToolBar
  7. CentOS 6.5 手动rpm包安装gcc、g++
  8. 一个简单的socket程序-linux
  9. 【二分查找】及相关问题
  10. windows server 2003断开远程之后自动注销用户