JSON字符串转换为对象 博客分类: Java jsonjava
程序员文章站
2024-02-04 15:39:22
...
作为前言,首先是要吐槽一下公司的脑残编译部署方式,web和core分开部署本来没什么问题,但是这丫居然不把json的包作为基础包而作为web的包,导致了core端不能使用,而且我们的core是可以当web来用的(不要在意这些细节),所以在core中处理json串就是个问题.没办法,跟编译那帮人也扯不清楚,只有自己写json的解析了.
思路还是将json的解析拆分为两类,一类为Object,解析为map,一类为Array,解析为list.
先谈Object的,比如是一个这样的串:{aa:bb,cc:{dd:ee,ff:gg}},不管它的层次有多深,先将其拆分为key1:value1,key2:value2,然后再根据value的startsWith是否是{或者来[来判断要不要递归.
Array的思路也跟Object类似,只是拆分为value1,value2...来处理.
还是上代码吧
将字符串解析为map的
字符串解析为list
json转成字符串
思路还是将json的解析拆分为两类,一类为Object,解析为map,一类为Array,解析为list.
先谈Object的,比如是一个这样的串:{aa:bb,cc:{dd:ee,ff:gg}},不管它的层次有多深,先将其拆分为key1:value1,key2:value2,然后再根据value的startsWith是否是{或者来[来判断要不要递归.
Array的思路也跟Object类似,只是拆分为value1,value2...来处理.
还是上代码吧
将字符串解析为map的
public Map<String,Object> parseMap(String str){ Map<String, Object> map = new HashMap<>(); str = str.replaceAll("(^\\{)|(\\}$)","");//处理掉前后的{} for(int begin=0,end=0,brackets=0;end<str.length();end++){ if((str.charAt(end) + "").equals(":")){ String key = str.substring(begin,end); for(begin=++end;end<=str.length();end++){ if(end < str.length() && ((str.charAt(end) + "").equals("{") || (str.charAt(end) + "").equals("["))){ brackets++; continue; } if(end < str.length() && ((str.charAt(end) + "").equals("}") || (str.charAt(end) + "").equals("]"))){ brackets--; } if((end == str.length() || (str.charAt(end) + "").equals(",")) && brackets == 0){ String value = str.substring(begin,end); if(value.startsWith("{")){ map.put(key, parseMap(value)); }else if(value.startsWith("[")){ map.put(key, parseList(value)); }else{ map.put( key.replaceAll("^[\",']|[\",']$",""), value.replaceAll("^[\",']|[\",']$","")); } begin = end +1; break; } } } } return map; }
字符串解析为list
public List<Object> parseList(String str){ List<Object> list = new ArrayList<Object>(); str = str.replaceAll("(^\\[)|(\\]$)",""); Stack<String> stack = new Stack<>(); for(int begin=0,end=0,brackets=0;end<=str.length();end++){ if(end < str.length() && ((str.charAt(end) + "").equals("{") || (str.charAt(end) + "").equals("["))){ brackets++; continue; } if(end < str.length() && ((str.charAt(end) + "").equals("}") || (str.charAt(end) + "").equals("]"))){ brackets--; } if((end == str.length() || (str.charAt(end) + "").equals(",")) && brackets == 0){ String value = str.substring(begin,end); if(value.toString(). startsWith("{")){ list.add(parseMap(value)); }else if(value.toString().startsWith("[")){ list.add(parseList(value)); }else{ list.add(value.replaceAll("^[\",']|[\",']$","")); } begin = end + 1; } } return list; }
json转成字符串
@SuppressWarnings("unchecked") public String JSON2String(Map<String,?> map){ StringBuilder str = new StringBuilder(); for(String key : map.keySet()){ str.append("\"").append(key).append("\":"); Object value = map.get(key); if(value instanceof Map){ str.append(JSON2String((Map<String,?>)value)).append(","); }else if(value instanceof List){ str.append(JSON2String((List<?>)value)).append(","); }else{ str.append("\"").append(value).append("\","); } } return "{" + str.substring(0,str.length() - 1) + "}"; } @SuppressWarnings("unchecked") public String JSON2String(List<?> list){ StringBuilder str = new StringBuilder(); for(Object value :list){ if(value instanceof Map){ str.append(JSON2String((Map<String,?>)value)).append(","); }else if(value instanceof List){ str.append(JSON2String((List<?>)value)).append(","); }else{ str.append("\"").append(value).append("\","); } } return "[" + str.substring(0,str.length() - 1) + "]"; }
推荐阅读
-
JSON字符串转换为对象 博客分类: Java jsonjava
-
JSON字符串转换为对象 博客分类: Java jsonjava
-
json字符串转java对象
-
前端js把json字符串转json对象(java对象转json对象命令)
-
前端js把json字符串转json对象(java对象转json对象命令)
-
如何将Java对象转换为JSON字符串
-
用 ObjectMapper将JSON字符串转换为java对象时,java对象一定要有无参构造函数 jsonObjectMapperjava
-
用 ObjectMapper将JSON字符串转换为java对象时,java对象一定要有无参构造函数 jsonObjectMapperjava
-
[Java] gson反序列化(json字符串转对象)遇到空对象/空数组的解决方法
-
Java中Json字符串直接转换为对象的方法(包括多层List集合)