基于JSON和java对象的互转方法
发布时间 - 2026-01-11 03:07:22 点击率:次先说下我自己的理解,一般而言,JSON字符串要转为java对象需要自己写一个跟JSON一模一样的实体类bean,然后用bean.class作为参数传给对应的方法,实现转化成功。

上述这种方法太麻烦了。其实有一种东西叫jsonObject可以直接不用新建实体类bean,而实现转化,先说org.json.JSONObject这个JSONObject,贴上代码:
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.json.JSONObject;
/**
* Json工具类,实现了实体类和Json数据格式之间的互转功能 使用实例:<br>
*/
public class JsonUtils {
/**
* 将一个实体类对象转换成Json数据格式
*
* @param bean
* 需要转换的实体类对象
* @return 转换后的Json格式字符串
*/
private static String beanToJson(Object bean) {
StringBuilder json = new StringBuilder();
json.append("{");
PropertyDescriptor[] props = null;
try {
props = Introspector.getBeanInfo(bean.getClass(), Object.class)
.getPropertyDescriptors();
} catch (IntrospectionException e) {
}
if (props != null) {
for (int i = 0; i < props.length; i++) {
try {
String name = objToJson(props[i].getName());
String value = objToJson(props[i].getReadMethod()
.invoke(bean));
json.append(name);
json.append(":");
json.append(value);
json.append(",");
} catch (Exception e) {
}
}
json.setCharAt(json.length() - 1, '}');
} else {
json.append("}");
}
return json.toString();
}
/**
* 将一个List对象转换成Json数据格式返回
*
* @param list
* 需要进行转换的List对象
* @return 转换后的Json数据格式字符串
*/
private static String listToJson(List<?> list) {
StringBuilder json = new StringBuilder();
json.append("[");
if (list != null && list.size() > 0) {
for (Object obj : list) {
json.append(objToJson(obj));
json.append(",");
}
json.setCharAt(json.length() - 1, ']');
} else {
json.append("]");
}
return json.toString();
}
/**
* 将一个对象数组转换成Json数据格式返回
*
* @param array
* 需要进行转换的数组对象
* @return 转换后的Json数据格式字符串
*/
private static String arrayToJson(Object[] array) {
StringBuilder json = new StringBuilder();
json.append("[");
if (array != null && array.length > 0) {
for (Object obj : array) {
json.append(objToJson(obj));
json.append(",");
}
json.setCharAt(json.length() - 1, ']');
} else {
json.append("]");
}
return json.toString();
}
/**
* 将一个Map对象转换成Json数据格式返回
*
* @param map
* 需要进行转换的Map对象
* @return 转换后的Json数据格式字符串
*/
private static String mapToJson(Map<?, ?> map) {
StringBuilder json = new StringBuilder();
json.append("{");
if (map != null && map.size() > 0) {
for (Object key : map.keySet()) {
json.append(objToJson(key));
json.append(":");
json.append(objToJson(map.get(key)));
json.append(",");
}
json.setCharAt(json.length() - 1, '}');
} else {
json.append("}");
}
return json.toString();
}
/**
* 将一个Set对象转换成Json数据格式返回
*
* @param set
* 需要进行转换的Set对象
* @return 转换后的Json数据格式字符串
*/
private static String setToJson(Set<?> set) {
StringBuilder json = new StringBuilder();
json.append("[");
if (set != null && set.size() > 0) {
for (Object obj : set) {
json.append(objToJson(obj));
json.append(",");
}
json.setCharAt(json.length() - 1, ']');
} else {
json.append("]");
}
return json.toString();
}
private static String stringToJson(String s) {
if (s == null) {
return "";
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
switch (ch) {
case '"':
sb.append("\\\"");
break;
case '\\':
sb.append("\\\\");
break;
case '\b':
sb.append("\\b");
break;
case '\f':
sb.append("\\f");
break;
case '\n':
sb.append("\\n");
break;
case '\r':
sb.append("\\r");
break;
case '\t':
sb.append("\\t");
break;
case '/':
sb.append("\\/");
break;
default:
if (ch >= '\u0000' && ch <= '\u001F') {
String ss = Integer.toHexString(ch);
sb.append("\\u");
for (int k = 0; k < 4 - ss.length(); k++) {
sb.append('0');
}
sb.append(ss.toUpperCase());
} else {
sb.append(ch);
}
}
}
return sb.toString();
}
public static String objToJson(Object obj) {
StringBuilder json = new StringBuilder();
if (obj == null) {
json.append("\"\"");
} else if (obj instanceof Number) {
Number num = (Number)obj;
json.append(num.toString());
} else if (obj instanceof Boolean) {
Boolean bl = (Boolean)obj;
json.append(bl.toString());
} else if (obj instanceof String) {
json.append("\"").append(stringToJson(obj.toString())).append("\"");
} else if (obj instanceof Object[]) {
json.append(arrayToJson((Object[]) obj));
} else if (obj instanceof List) {
json.append(listToJson((List) obj));
} else if (obj instanceof Map) {
json.append(mapToJson((Map) obj));
} else if (obj instanceof Set) {
json.append(setToJson((Set) obj));
} else {
json.append(beanToJson(obj));
}
return json.toString();
}
/**
* @Title: json2Map
* @Creater: chencc <br>
* @Date: 2011-3-28 <br>
* @Description: TODO转化json2map
* @param @param jsonString
* @param @return
* @return Map<String,Object>
* @throws
*/
@SuppressWarnings("unchecked")
public static Map<String, Object> json2Map(String jsonString) {
Map<String, Object> map = new HashMap<String, Object>();
try {
if(null != jsonString && !"".equals(jsonString)){
JSONObject jsonObject = new JSONObject(jsonString);
Iterator keyIter = jsonObject.keys();
String key = "";
Object value = null;
while (keyIter.hasNext()) {
key = (String) keyIter.next();
value = jsonObject.get(key);
map.put(key, value);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
//测试方法
public static void main(String[] args) {
Map<String,Object> params = new HashMap<String,Object>();
params.put("callId123", Integer.valueOf(1000));
Map retMap = new HashMap();
retMap.put("params", params);
retMap.put("result", true);
List ls = new ArrayList();
ls.add(new HashMap());
ls.add("hello world!!");
ls.add(new String[4]);
retMap.put("list", ls);
String[] strArray = new String[10];
strArray[1]="first";
strArray[2]="2";
strArray[3]="3";
System.out.println("Boolean:"+JsonUtils.objToJson(true));
System.out.println("Number:"+JsonUtils.objToJson(23.3));
System.out.println("String:"+JsonUtils.objToJson("sdhfsjdgksdlkjfk\"sd,!#%$^&*#(*@&*%&*$fsdfsdfsdf"));
System.out.println("Map :"+JsonUtils.objToJson(retMap));
System.out.println("List:"+JsonUtils.objToJson(ls));
System.out.println("Array:"+JsonUtils.objToJson(strArray));
String json = JsonUtils.objToJson(retMap);
Map r = JsonUtils.json2Map(json);
System.out.println(r.get("callId123"));
}
}
再来聊聊net.sf.json.JSONObject这个JSONObject,代码如下
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;
import net.sf.json.util.PropertyFilter;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonUtil {
private static ObjectMapper objectMapper = null;
/**
* JSON初始化
*/
static {
objectMapper = new ObjectMapper();
//设置为中国上海时区
objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
//空值不序列化
objectMapper.setSerializationInclusion(Include.NON_NULL);
//反序列化时,属性不存在的兼容处理
objectMapper.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
//序列化时,日期的统一格式
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
/**
* 把对象转换成为Json字符串
*
* @param obj
* @return
*/
public static String convertObjectToJson(Object obj) {
if (obj == null) {
// throw new IllegalArgumentException("对象参数不能为空。");
return null;
}
try {
return objectMapper.writeValueAsString(obj);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 把json字符串转成Object对象
* @param jsonString
* @return T
*/
public static <T> T parseJsonToObject(String jsonString, Class<T> valueType) {
if(jsonString == null || "".equals((jsonString))){
return null;
}
try {
return objectMapper.readValue(jsonString, valueType);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 把json字符串转成List对象
* @param jsonString
* @return List<T>
*/
@SuppressWarnings("unchecked")
public static <T> List<T> parseJsonToList(String jsonString,Class<T> valueType) {
if(jsonString == null || "".equals((jsonString))){
return null;
}
List<T> result = new ArrayList<T>();
try {
List<LinkedHashMap<Object, Object>> list = objectMapper.readValue(jsonString, List.class);
for (LinkedHashMap<Object, Object> map : list) {
String jsonStr = convertObjectToJson(map);
T t = parseJsonToObject(jsonStr, valueType);
result.add(t);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* JSON处理含有嵌套关系对象,避免出现异常:net.sf.json.JSONException: There is a cycle in the hierarchy的方法
* 注意:这样获得到的字符串中,引起嵌套循环的属性会置为null
*
* @param obj
* @return
*/
public static JSONObject getJsonObject(Object obj) {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
@Override
public boolean apply(Object source, String name, Object value) {
if(value==null){
return true;
}
return false;
}
});
return JSONObject.fromObject(obj, jsonConfig);
}
/**
* JSON处理含有嵌套关系对象,避免出现异常:net.sf.json.JSONException: There is a cycle in the hierarchy的方法
* 注意:这样获得到的字符串中,引起嵌套循环的属性会置为null
*
* @param obj
* @return
*/
public static JSONArray getJsonArray(Object obj) {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
return JSONArray.fromObject(obj, jsonConfig);
}
/**
* 解析JSON字符串成一个MAP
*
* @param jsonStr json字符串,格式如: {dictTable:"BM_XB",groupValue:"分组值"}
* @return
*/
public static Map<String, Object> parseJsonStr(String jsonStr) {
Map<String, Object> result = new HashMap<String, Object>();
JSONObject jsonObj = JsonUtil.getJsonObject(jsonStr);
for (Object key : jsonObj.keySet()) {
result.put((String) key, jsonObj.get(key));
}
return result;
}
}
总结:net.sf.json.JSONObject这个属于json-lib这个老牌的系列,依赖的包超级多,commons的lang、logging、beanutils、collections等组件都有。
而org.json则相对来说依赖的包少一些,速度和性能方面没有怎么进行测试。
以上这篇基于JSON和java对象的互转方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# JSON和java对象互转
# java中常用的json
# jsonarray
# map数据结构与对象互转详解
# Java中对象 和 json 互转四种方式 json-lib、Gson、FastJson、Jacks
# java中json和对象之间相互转换的运用
# JAVA中JSONObject对象和Map对象之间的相互转换
# Java实现Json字符串与Object对象相互转换的方式总结
# 详谈Java中net.sf.json包关于JSON与对象互转的坑
# java对象与json对象间的相互转换的方法
# java中实体类和JSON对象之间相互转化
# Java中Json字符串和Java对象的互转
# 数据格式
# 转换成
# 实体类
# 给大家
# 序列化
# 先说
# 转成
# 自己的
# 都有
# 有一种
# 希望能
# 再来
# 不存在
# 可以直接
# 这篇
# 设置为
# 贴上
# 小编
# 大家多多
# 中国上海
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
济南网站建设制作公司,室内设计网站一般都有哪些功能?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
如何安全更换建站之星模板并保留数据?
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Linux安全能力提升路径_长期防护思维说明【指导】
深圳网站制作的公司有哪些,dido官方网站?
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
php打包exe后无法访问网络共享_共享权限设置方法【教程】
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
专业商城网站制作公司有哪些,pi商城官网是哪个?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何用狗爹虚拟主机快速搭建网站?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel如何自定义错误页面(404, 500)?(代码示例)
制作公司内部网站有哪些,内网如何建网站?
Laravel如何发送系统通知?(Notification渠道示例)
zabbix利用python脚本发送报警邮件的方法
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Angular 表单中正确绑定输入值以确保提交与验证正常工作
Laravel如何使用withoutEvents方法临时禁用模型事件
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
如何快速搭建安全的FTP站点?
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
如何快速生成橙子建站落地页链接?
想要更高端的建设网站,这些原则一定要坚持!
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
JavaScript如何实现倒计时_时间函数如何精确控制
北京专业网站制作设计师招聘,北京白云观官方网站?
如何在 React 中条件性地遍历数组并渲染元素
如何在Tomcat中配置并部署网站项目?
制作旅游网站html,怎样注册旅游网站?
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
如何快速搭建高效香港服务器网站?
Android滚轮选择时间控件使用详解
JS经典正则表达式笔试题汇总
浅谈redis在项目中的应用
如何在阿里云部署织梦网站?
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
如何注册花生壳免费域名并搭建个人网站?

