java中JSONObject转换为HashMap(方法+main方法调用实例)
作者:王杨_weikisa 发布时间:2023-08-10 04:04:08
1.首先要导入json相关的jar包
引入的jar包:
(版本自行定义,可以选用使用人数偏多的版本,这样比较稳定)
commons-beanutils-1.9.2.jar
commons-collections-3.2.1.jar
commons-lang-2.6.jar
commons-logging-1.2.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar
jar包的下载可以去下面这个网址搜索:
https://mvnrepository.com/
2.在Eclipse下(也可以是IntelliJ IDEA或者MyEclipse)
新建package和Class(步骤略过,可自行选择名字),这里就使用jsonTest。
以下代码块方法见注释,是将JSONObject转换为HashMap的主要方法,传入参数为一个JSONObject对象,返还值为一个HashMap。
//1.將JSONObject對象轉換為HashMap<String,String>
public static HashMap<String, String> JsonObjectToHashMap(JSONObject jsonObj){
HashMap<String, String> data = new HashMap<String, String>();
Iterator it = jsonObj.keys();
while(it.hasNext()){
String key = String.valueOf(it.next().toString());
String value = (String)jsonObj.get(key).toString();
data.put(key, value);
}
System.out.println(data);
return data;
}
这个方法是将JSON字符串转换为HashMap,传入参数为一段json格式的字符串,返还一个HashMap。
//2.将json字符串转换成HashMap<String,String>
public static HashMap<String, String> JsonToHashMap(String JsonStrin){
HashMap<String, String> data = new HashMap<String, String>();
try{
// 将json字符串转换成jsonObject
JSONObject jsonObject = JSONObject.fromObject(JsonStrin);
@SuppressWarnings("rawtypes")
Iterator it = jsonObject.keys();
// 遍历jsonObject数据,添加到Map对象
while (it.hasNext())
{
String key = String.valueOf(it.next()).toString();
String value = (String) jsonObject.get(key).toString();
data.put(key, value);
}
}catch (Exception e) {
e.printStackTrace();
//JOptionPane.showMessageDialog(null,"ERROR:["+e+"]");
}
System.out.println(data);
return data;
}
在这里顺便介绍一下Iterator类(迭代器)
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
Java中的Iterator功能比较简单,并且只能单向移动:
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
3.直接上代码
package JSON;
import java.util.HashMap;
import java.util.Iterator;
import net.sf.json.JSONObject;
public class JsonTest {
public static void main(String[] args) {
JSONObject jsonObj = new JSONObject(true);
String content1 = "aaaaa";
String content2 = "bbbbb";
String content3 = "ccccc";
jsonObj.put("a", content1);
jsonObj.put("b", content2);
jsonObj.put("c", content3);
System.out.println(jsonObj.toString());
JsonObjectToHashMap(jsonObj);
String jsonstr = "{name:'王杨',sex:'男',school:'郑州航空工业管理学院'}";
JsonToHashMap(jsonstr);
}
//1.將JSONObject對象轉換為HashMap<String,String>
public static HashMap<String, String> JsonObjectToHashMap(JSONObject jsonObj){
HashMap<String, String> data = new HashMap<String, String>();
Iterator it = jsonObj.keys();
while(it.hasNext()){
String key = String.valueOf(it.next().toString());
String value = (String)jsonObj.get(key).toString();
data.put(key, value);
}
System.out.println(data);
return data;
}
//2.将json字符串转换成HashMap<String,String>
public static HashMap<String, String> JsonToHashMap(String JsonStrin){
HashMap<String, String> data = new HashMap<String, String>();
try{
// 将json字符串转换成jsonObject
JSONObject jsonObject = JSONObject.fromObject(JsonStrin);
@SuppressWarnings("rawtypes")
Iterator it = jsonObject.keys();
// 遍历jsonObject数据,添加到Map对象
while (it.hasNext())
{
String key = String.valueOf(it.next()).toString();
String value = (String) jsonObject.get(key).toString();
data.put(key, value);
}
}catch (Exception e) {
e.printStackTrace();
//JOptionPane.showMessageDialog(null,"ERROR:["+e+"]");
}
System.out.println(data);
return data;
}
}
记得修改自己的package名称和 class名称。
4.调用main方法测试
(1)传入参数为JSONObject:
输出结果为:
(2)传入参数为JSON字符串:
输出结果为:
这里可以看到,输出的参数顺序和传入时正好相反。但是输出类型为HashMap,数据存储的格式是以key-value键值对的形式存数于HashMap中的。我们可以通过获取key值来获取到其对应的value。
增加如下代码在main方法最后面:
System.out.println("");//空格换行
//通过对应的key键值,获取value
HashMap<String,String> hashmap = JsonToHashMap(jsonstr);
System.out.println("--------通过遍历HashMap输出值:-------");
System.out.println("name:"+hashmap.get("name")+",sex:"+
hashmap.get("sex")+",school:"+hashmap.get("school"));
得到如下结果:
结语:
到此基本的方法介绍完毕,其实是依靠了JSONObject这个对象的fromObject()方法。fromObject()方法可以转换的类型很多,可以是map、list、数组等等。运用在自己的项目中时,可以是bean或者model等自定义的类。
1. List集合转换成json代码
List list = new ArrayList();
list.add( "first" );
list.add( "second" );
JSONArray jsonArray2 = JSONArray.fromObject( list );
2. Map集合转换成json代码
Map map = new HashMap();
map.put("name", "json");
map.put("bool", Boolean.TRUE);
map.put("int", new Integer(1));
map.put("arr", new String[] { "a", "b" });
map.put("func", "function(i){ return this.arr[i]; }");
JSONObject json = JSONObject.fromObject(map);
3. Bean转换成json代码
JSONObject jsonObject = JSONObject.fromObject(new JsonBean());
4. 数组转换成json代码
boolean[] boolArray = new boolean[] { true, false, true };
JSONArray jsonArray1 = JSONArray.fromObject(boolArray);
以上类型均可以借用fromObject()方法转换为一个JSONObject类型实例。
json作为轻量级的数据格式,在前后端数据交互时很常见,每个公司应该都有自己的JSON转换方法,是公司常见的工具类。
方便了随后的开发使用。
来源:https://blog.csdn.net/qq_41334351/article/details/95956065


猜你喜欢
- 本文实例讲述了c#窗体传值用法。分享给大家供大家参考。具体分析如下:对于窗体间的数据传递,是刚开始从事.Net窗体应用程序开发人员碰到的一个
- 1,通过Handler机制主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如
- 前言开篇一个例子,我看看都有谁会?如果不会的,或者不知道原理的,还是老老实实看完这篇文章吧。@Slf4j(topic = "c.V
- 场景很多情况下,查单条记录也用通用查询接口,但是输入的条件却能确定唯一性。如果我们要确定list中只有一条记录,如下写法:// 记录不为空
- 1、IndexTagController.java@GetMapping("/tags/{id}") &n
- 初始化sp 内部将数据放到 xml 文件中,加载时首先会将硬盘中文件读取到内存中,这样加快了访问速度这次从源码开始,看看里面具体做了什么//
- public class LogHelper { &nbs
- 原理概述Lifecycle主要用于Activity、Fragment这一类具有状态的组件的状态监听,最主要的一个作用就是将原先Activit
- 线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组
- 前言应用系统需要通过Cache来缓存不经常改变得数据来提高系统性能和增加系统吞吐量,避免直接访问数据库等低速存储系统。缓存的数据通常存放在访
- 最近在进行android开发过程中,在将 Intent传递给调用的组件并完成组件的调用时遇到点困难,并且之前对Intent的学习也是一知半解
- 一、ArrayList 了解过吗?它是啥?有啥用?众所周知,Java 集合框架拥有两大接口 Collection 和 Map,其中,Coll
- 之前使用的那台电脑有点旧了,稍微跑一下程序就报内存不够。本来想考虑入手一台带GPU的新电脑,在商品浏览里的时候,考虑到钱包不够厚实。就选了家
- 本文实例为大家分享了unity实现按页码翻页效果的具体代码,供大家参考,具体内容如下用来做背包 商店的按页翻页功能,先上效果图其中,drag
- 最近一直在调用微信的API,却发现一直调用不成功,纠结了好久,各方面找教程,找官方,官方里的文档也只是写得很模糊,说是按三步走。1、申请Ap
- FTP(File Transfer Protocol)就是文件传输协议。通过FTP客户端从远程FTP服务器上拷贝文件到本地计算机称为下载,将
- 目录1. 简单认识BeanProcessorBeanProcessor的理解一个BeanProcessor的使用实例2. BeanProce
- 前言大家都知道MySQL数据库很好用,但数据量到了千万以上了,想增加字段是非常痛苦的,这个在MongoDB里就不存在,字段想怎么加就怎么加,
- 在最近的两个项目中,项目需求要求我们实现 /*登陆页面的内容能够随着键盘的弹出而被顶上去,避免键盘遮挡住登陆按钮*/ 这样的效果,宝宝心里苦
- 在使用NavigationPage导航的时候, 我们可以给里面添加一些功能按钮, 如下所示:<ContentPage.ToolbarI