/*** 解析多层次Json字符串,封装多层Json,避免字符串中有特殊字符而出现的错误 * @author wangcccong * @version 1.140122* create at: Fri, 13 Jun 2014* update at: Mon, 1 Sep 2014*/
public class JsonUtil {private final static String regex = "\"([^\\\" ]+?)\":";/*** 一个方法解析多层json数据  json + 正则 + 递归* @see {@link java.util.regex.Matcher}, {@link java.util.regex.Pattern}* @param jsonStr* @return {@link java.util.Map} or {@link java.util.List} or {@link java.lang.String}*/public static Object jsonParse(final String jsonStr) {if (jsonStr == null) throw new NullPointerException("JsonString shouldn't be null");try {if (isJsonObject(jsonStr)) {final Pattern pattern = Pattern.compile(regex);final Matcher matcher = pattern.matcher(jsonStr);final Map<String, Object> map = new HashMap<String, Object>();final JSONObject jsonObject = new JSONObject(jsonStr);try {for (; matcher.find(); ) {String groupName = matcher.group(1);Object obj = jsonObject.opt(groupName);//Log.e(groupName, obj+"");if (isJsonObject(obj+"") || isJsonArray(obj+"")) {matcher.region(matcher.end() + (obj+"").replace("\\", "").length(), matcher.regionEnd());map.put(groupName, jsonParse(obj+""));} else {map.put(groupName, obj+"");}}} catch (Exception e) {// TODO: handle exceptionLog.e("object---error", e.getMessage()+"--"+e.getLocalizedMessage());}return map;} else if (isJsonArray(jsonStr)) {List<Object> list = new ArrayList<Object>();try {JSONArray jsonArray = new JSONArray(jsonStr);for (int i = 0; i < jsonArray.length(); i++) {Object object = jsonArray.opt(i);list.add(jsonParse(object+""));}} catch (Exception e) {// TODO: handle exceptionLog.e("array---error", e.getMessage()+"--"+e.getLocalizedMessage());}return list;} } catch (Exception e) {// TODO: handle exceptionLog.e("RegexUtil--regexJson", e.getMessage()+"");}return jsonStr;}/*** To determine whether a string is JsonObject {@link org.json.JSONObject}* @param jsonStr {@link java.lang.String}* @return boolean*/private static boolean isJsonObject(final String jsonStr) {if (jsonStr == null) return false;return Pattern.matches("^\\{.*\\}$", jsonStr.trim());}/*** To determine whether a string is JsonArray {@link org.json.JSONArray};* @param jsonStr {@link java.lang.String}* @return boolean*/private static boolean isJsonArray(final String jsonStr) {if (jsonStr == null) return false;return Pattern.matches("^\\[.*\\]$", jsonStr.trim());}/*** 将对象分装为json字符串 (json + 递归)* @param obj 参数应为{@link java.util.Map} 或者 {@link java.util.List}* @return*/@SuppressWarnings("unchecked")public static Object jsonEnclose(Object obj) {try {if (obj instanceof Map) {   //如果是Map则转换为JsonObjectMap<String, Object> map = (Map<String, Object>)obj;Iterator<Entry<String, Object>> iterator = map.entrySet().iterator();JSONStringer jsonStringer = new JSONStringer().object();while (iterator.hasNext()) {Entry<String, Object> entry = iterator.next();jsonStringer.key(entry.getKey()).value(jsonEnclose(entry.getValue()));}JSONObject jsonObject = new JSONObject(new JSONTokener(jsonStringer.endObject().toString()));return jsonObject;} else if (obj instanceof List) {  //如果是List则转换为JsonArrayList<Object> list = (List<Object>)obj;JSONStringer jsonStringer = new JSONStringer().array();for (int i = 0; i < list.size(); i++) {jsonStringer.value(jsonEnclose(list.get(i)));}JSONArray jsonArray = new JSONArray(new JSONTokener(jsonStringer.endArray().toString()));return jsonArray;} else {return obj;}} catch (Exception e) {// TODO: handle exceptionLogUtil.e("jsonUtil--Enclose", e.getMessage());return e.getMessage();}}}//解析时使用示例
Object object = JsonUtil.jsonParse(RegexPolicy.Json, jsonStr.substring(jsonStr.indexOf("{"), jsonStr.lastIndexOf("}")+1));if (object instanceof String) {Log.e("string", object.toString());} else if (object instanceof Map) {@SuppressWarnings("unchecked")HashMap<String, Object> map = (HashMap<String, Object>)object;Iterator<Entry<String, Object>>  iterator = map.entrySet().iterator();while (iterator.hasNext()) {Entry<String, Object> entry = iterator.next();if (entry.getValue() instanceof List) {Log.e(entry.getKey(), entry.getValue().toString());} else {Log.e(entry.getKey(), entry.getValue().toString());}}} else if (object instanceof List) {Log.e("list", object.toString());}//封装时使用示例
Map<String, Object> map = new HashMap<String, Object>();map.put("returnCode", "0");map.put("returnMsg", "成功");List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); Map<String, Object> listMap = new HashMap<String, Object>();listMap.put("test", "测试");listMap.put("fuck", "fuck");list.add(listMap);list.add(listMap);map.put("returnStatus", list);LogUtil.e("fuck", JsonUtil.jsonEnclose(map).toString()+"---");
//封装时结果
{"returnCode":"0","returnStatus":[{"test":"测试","fuck":"fuck"},{"test":"测试","fuck":"fuck"}],"returnMsg":"成功"}---

转载于:https://www.cnblogs.com/lgy0069/p/5565993.html

将Object对象转成 json串相关推荐

  1. Flex4将对象转换成json串

    使用json需要先引入as3corelib.swc 1.将对象转换成json串 var obj:Object = new Object(); obj.filename = "1.jpg&qu ...

  2. 将Model对象转换成json文本或者json二进制文件

    将Model对象转换成json文本或者json二进制文件 https://github.com/casatwy/AnyJson 注意:经过测试,不能够直接处理字典或者数组 主要源码的注释 AJTran ...

  3. 把对象转换成JSON字符串 第二稿支持移动设备

    /*** 导入jackson包 把对象转换成JSON字符串 第二稿 支持移动设备* @param pn* @param request* @return*/@RequestMapping(value ...

  4. python对象列表转换为字典_python实现class对象转换成json/字典的方法

    本文实例讲述了python实现class对象转换成json字典的方法.分享给大家供大家参考,具体如下: # -*- encoding: UTF-8 -*- class Student: name = ...

  5. Json对象转换成Json数组

    问题 在写单元测试是报错如下: JSON解析错误:不能将JavaUTIL.AARYLIST实例反序列化到StaskObjo对象令牌中 代码: 自己解决了挺长时间,也没研究出什么好的办法,最后问朴世超组 ...

  6. python里class转换_python实现class对象转换成json/字典的方法

    python实现class对象转换成json/字典的方法 发布于 2016-03-28 08:05:44 | 153 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是 ...

  7. python 对象转换为json_Python Python对象转换成JSON

    1.从Python对象转换成JSON 如果有Python对象,则可以使用json.dumps()方法将其转换为JSON字符串. 例如: 从Python对象转换为JSON:import json # a ...

  8. Gson把对象转成json格式的字符串

    近期在做一个java web service项目,须要用到jason,本人对java不是特别精通,于是開始搜索一些java平台的json类库. 发现了google的gson.由于之前对于protoco ...

  9. Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象

    文章目录 后端部分 前端部分 后端部分 Option op = new Option("海淀","hd");//java对象转换json对象 JSONObjec ...

  10. GSON将Java对象转成JSON时,如何排除某些字段

    GSON 是Google发布的 JSON 序列化/反序列化工具,非常容易使用.本文简要讨论在使用GSON将Java对象转成JSON时,如何排除某些字段. 最简单的用法 假设有下面这个类: 1 clas ...

最新文章

  1. Python使用sklearn构建ElasticNet回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型
  2. Liststring[] 如何去重
  3. day24-1 元类
  4. PHP+Mysql查询上一篇和下一篇文章实例
  5. display none 隐藏后怎么显示_Web 隐藏技术:几中隐藏 Web 中的元素方法及优缺点
  6. 图解CentOS系统启动流程
  7. INTERSPEECH2020 语音情感分析论文之我见
  8. php根据时间搜索的控件,yii2 crud生成的搜索中 自定义按 时间 搜索
  9. android app打开流程_app开发模式的应用
  10. PAT (Basic Level) Practice1006 换个格式输出整数
  11. 推荐一套linux视频-----很棒
  12. 官方开源的安卓客户端
  13. 滴滴翻译技术探索与实践
  14. 【Html】 Html写静态淘宝页面
  15. 老罗如果输了整个民族都输了
  16. NI LabVIEW 2018 DAQmx定时属性节点 缺失部分属性的问题 解决方案
  17. w7的计算机的工具在哪里,win7旗舰版内置的便签工具在哪?工具使用图解
  18. 2017年1月历史文章汇总
  19. flag in flag.php,hgame2019解题记录
  20. 2019 年 2 月份文章汇总

热门文章

  1. Affinity Designer 查询面板渐变颜色
  2. Jquery—JQuery对checkbox的操作(01)
  3. yii2 中 controller 向layout 传值
  4. uni-app两种方法解决跨域问题【已验证】
  5. Boolean.getBoolean()和Boolean.parseBoolean()
  6. DIV+CSS的好处和意义
  7. linux磁盘健康监控,MegaCli监控RAID磁盘健康信息
  8. hive设置为本地模式,从而避免MapReduce
  9. 剑指 Offer 07. 重建二叉树(day02)
  10. c语言编程流水灯与交通灯实验,C51单片机实验报告流水灯交通灯定时器双机交互时钟(10页)-原创力文档...