java中对象转json,json转list,json转map
在IDEA中的springboot项目里写的一个测试例子,新建User类,四个字段,Long id , String password,String userName,int age; 以及带参构造,toString方法
在pom.xml中添加 net.sf.json-lib 依赖:
<!-- 对象转json依赖包 -->
<!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<!--不加下面这一项会报错,是因为json-lib支持版本是jdk1.5,所以要指定下版本-->
<classifier>jdk15</classifier>
</dependency>
json转换测试类:
package com.lch.springboot04.jsonparse; import com.lch.springboot04.domain.User;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject; import java.util.*; /**
* 对象转换为json数据测试,通过net.sf.json-lib.jar
*/
public class JsonParse { public static void main(String[] args) {
/**
* object 转为json数组 :数组,对象,map,list,list<Map<String,Object>> 都可以;
* object 转为json字符串:只有 自定义对象 和 map可以转换,其他都不能这样转;
*/ String[] arr = {"a", "b", "c"};
System.out.println("string数组转为json数组" + JSONArray.fromObject(arr)); //["a","b","c"]
// System.out.println("string数组转为json字符串"+ JSONObject.fromObject(arr).toString()); //无法转换:'object' is an array. Use JSONArray instead //java自定义对象转json
User jack = new User("123", "jack", 18);
System.out.println("Java对象转为json数组" + JSONArray.fromObject(jack));
//结果:[{"age":18,"id":0,"password":"123","userName":"jack"}]
System.out.println("Java对象转为json字符串" + JSONObject.fromObject(jack).toString());
//结果:{"age":18,"id":0,"password":"123","userName":"jack"} //list转json
User tom = new User("456", "tom", 20);
List<User> userList = new ArrayList<>();
userList.add(jack);
userList.add(tom);
System.out.println("list转为json数组" + JSONArray.fromObject(userList));
// 结果:list转为json数组[{"age":18,"id":0,"password":"123","userName":"jack"},{"age":20,"id":0,"password":"456","userName":"tom"}]
// System.out.println("list转为json字符串"+ JSONObject.fromObject(userList).toString()); //不能转为json字符串 // list<Map<String,Object>> 转json
List<Map<String, Object>> mapList = new ArrayList();
Map<String, Object> m1 = new HashMap<String, Object>();
m1.put("jack", jack);
m1.put("tom", tom);
Map<String, Object> m2 = new HashMap<String, Object>();
m2.put("alex", new User("789", "alex", 20));
mapList.add(m1);
mapList.add(m2);
System.out.println("map转json数组" + JSONArray.fromObject(m2));
// 转换结果:[{"alex":{"age":20,"id":0,"password":"789","userName":"alex"}}]
System.out.println("map转json字符串" + JSONObject.fromObject(m2));
//结果:{"alex":{"age":20,"id":0,"password":"789","userName":"alex"}}
System.out.println(" list<Map<String,Object>> 转json数组" + JSONArray.fromObject(mapList));
// 结果:[{"tom":{"age":20,"id":0,"password":"456","userName":"tom"},"jack":{"age":18,"id":0,"password":"123","userName":"jack"}},{"alex":{"age":20,"id":0,"password":"789","userName":"alex"}}]
// System.out.println(" list<Map<String,Object>> 转json字符串"+JSONObject.fromObject(mapList));//不能转,'object' is an array. Use JSONArray instead /**
* json字符串转map
*/
/* String jsonStr = "{\"alex\":{\"age\":20,\"id\":0,\"password\":\"789\",\"userName\":\"alex\"}}";
Map<String,Object> map = jsonToMap(JSONObject.fromObject(jsonStr).get("alex").toString());
System.out.println("json字符串转map:"+map.get("age"));*/
// {"total":2,"items":[{"age":15,"id":1,"name":"jack"},{"age":16,"id":2,"name":"tom"}]}
String jsonStr2 = "{\"total\":2,\"items\":[{\"age\":15,\"id\":1,\"userName\":\"jack\"},{\"age\":16,\"id\":2,\"userName\":\"tom\"}]}";
Map<String, Object> stringObjectMap = jsonToMap(jsonStr2);
for (Map.Entry<String, Object> entry : stringObjectMap.entrySet()) {
System.out.println(entry.getKey() + "--" + entry.getValue());
}
/**输出结果:
* total--2
items--[{"age":15,"id":1,"userName":"jack"},{"age":16,"id":2,"userName":"tom"}]
*/ // jsonstr转list,list中存放Java Bean
String jsonStr3 = JSONObject.fromObject(jsonStr2).get("items").toString();
System.out.println("jsonStr3=" + jsonStr3);
List list = jsonStr2ObjectList(jsonStr3, User.class);
for (Object u : list) {
System.out.println(u);
}
/**
* 输出User{id=1, password='null', userName='jack', age=15}
User{id=2, password='null', userName='tom', age=16}
*/ } /**
* json字符串转map
*
* @param jsonStr
* @return
*/
public static Map<String, Object> jsonToMap(String jsonStr) {
JSONObject jsonObject = JSONObject.fromObject(jsonStr); //首先转换为 JSONObject
Iterator<String> nameItr = jsonObject.keys();//获取jsonObject的keySet()的迭代器
String key;//接收key值
Map<String, Object> outMap = new HashMap<>(); //存放转换结果
while (nameItr.hasNext()) {
key = nameItr.next();
outMap.put(key, jsonObject.get(key));
}
return outMap;
} /**
* JSONObject类中keys()方法默认返回jsonObject的keyset的迭代器
* public Iterator keys() {
* this.verifyIsNull();
* return this.keySet().iterator();
* }
*/ /** json转list,list中存放JavaBean
* @param jsonStr 要转换的json字符串
* @param clazz javaBean的Class对象
* @return
*/
public static List jsonStr2ObjectList(String jsonStr, Class clazz) {
JSONArray array = JSONArray.fromObject(jsonStr);
List list = new ArrayList();
for (Iterator itr = array.iterator(); itr.hasNext(); ) {
JSONObject jsonObject = (JSONObject) itr.next();
//取出json字符串中的一个子字符串,转换为指定类型的JavaBean
Object bean = JSONObject.toBean(jsonObject, clazz);
list.add(bean);
}
return list;
}
}
结果:


java中对象转json,json转list,json转map的更多相关文章
- Java中对象的深复制和浅复制详解
1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...
- java 中对象比较大小
java 中对象比较大小 java 中对象比较大小有两种方法 1:实现Comparable 接口 的 public int compareTo(T o) 方法: 2:实现Comparator 接口 的 ...
- Java中对象、对象引用、堆、栈、值传递以及引用传递的详解
Java中对象.对象引用.堆.栈.值传递以及引用传递的详解 1.对象和对象引用的差别: (1).对象: 万物皆对象.对象是类的实例. 在Java中new是用来在堆上创建对象用的. 一个对象能够被多个引 ...
- Java中对象流使用的一个注意事项
再写jsp的实验作业的时候,需要用到java中对象流,但是碰到了之前没有遇到过的情况,改bug改到崩溃!!记录下来供大家分享 如果要用对象流去读取一个文件,一定要先判断这个文件的内容是否为空,如果为空 ...
- Java中对象和引用的理解
偶然想起Java中对象和引用的基本概念,为了加深下对此的理解和认识,特地整理一下相关的知识点,通过具体实例从两者的概念和区别两方面去更形象的认识理解,再去记忆. 一.对象和引用的概念: 在Java中万 ...
- Java中对象的生与灭- 核心篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中对象的生与灭- 核心篇>,希望对大家有帮助,谢谢 文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦 简介 ...
- 你真的了解JAVA中对象和类、this、super和static关键字吗
作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 目录 Java对象究竟是什么? 创建对象的过程 ...
- Java中对象JSON格式化处理时的一个坑
在项目中遇到了一个JSON的坑.记录下. 直接上代码: import java.util.ArrayList; import com.alibaba.fastjson.JSON; public cla ...
- 【SpringBoot】 Java中如何封装Http请求,以及JSON多层嵌套解析
前言 本文中的内容其实严格来说不算springboot里面的特性,属于JAVA基础,只是我在项目中遇到了,特归纳总结一下. HTTP请求封装 目前JAVA对于HTTP封装主要有三种方式: 1. JAV ...
随机推荐
- Jsoup获取DOM元素
(1)doc.getElementsByTag(String tagName); (2)doc.getElementById(String id); (3)doc.getElementsByClass ...
- 1206C Almost Equal
题目大意 给你一个n 让你用1~2*n的数填满一个2*n个点的环 使得任意连续的n个位置的和的最大值减最小值不大于1 分析 我们通过瞎jb找规律发现n为偶数吴姐 而n为奇数我们设前n个位置为0组,后n ...
- python比C程序相比非常慢
w http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001374738136930 ...
- git subtree模块化代码管理
Git Subtree 的原理 首先,你有两个伟大的项目——我们叫他P1项目.P2项目,还有一个牛逼的要被多个项目共用的项目——我们叫他S项目.我们通过简要讲解使用Subtree来同步代码的过程来解释 ...
- C语言的未初始化的数组的值为什么是随机的
突然想起来前几天同学问我为什么没有初始化的数组的值是随机的,发现这个困惑自己也是存在的,所以自己总结的心得. 1. 首先,并不是所有未初始化的数组的值都是随机的.对于没有初始化的数组,分两种情况: ( ...
- 【转】时间序列分析——基于R,王燕
<时间序列分析——基于R>王燕,读书笔记 笔记: 一.检验: 1.平稳性检验: 图检验方法: 时序图检验:该序列有明显的趋势性或周期性,则不是平稳序列 自相关图检验:(ac ...
- python安装centos7
1.安装git (需root权限) yum -y install git 2.安装依赖包 yum -y install gcc make patch gdbm-devel openssl-devel ...
- WildFly的学习
1. WildFly介绍: WildFly,前身是JBoss AS,从V8开始为区别于JBoss EAP,更名为WildFly. 由红帽 (Red Hat)开发,是另一个功能齐全且经过认证的应用服务器 ...
- C#静态变量总结
1.初始化 全局static变量的初始化在编译的时候进行,并且只初始化一次 . 函数static变量在函数中有效,第一次进入函数初始化.以后进入函数将沿用上一次的值. 2.生命期 全局static变 ...
- python包的补充
1.包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间 2.常见目录结构 import os 2 os.makedirs('glance/api') 3 os.makedirs('gl ...