java map转json servlet response
1、手写一个map转json的类
1.1 调用方式
//给前端放回json数据
Map<String, Object> map = new HashMap<>();
map.put("name", "bb");
map.put("age", "cc");
map.put("good", "dd"); JSONWrapper wap = new JSONWrapper();
String data = wap.write(map);
System.out.println(data);
1.2 封装的类
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; public class JSONWrapper { private static final String COMMA = ",";
private static final String MARKS = "\"";
private static final String COLON = ":";
private static final String BRACKET_LEFT = "[";
private static final String BRACKET_RIGHT = "]";
private static final String BRACE_LEFT = "{";
private static final String BRACE_RIGHT = "}";
private static final String STR_VERSION_UID = "serialVersionUID";
final StringBuilder json = new StringBuilder(); public String write(Map<String, Object> jsonMap) {
try {
appendMap(jsonMap);
} catch (RuntimeException e) {
e.printStackTrace();
}
return json.toString();
} private void appendMap(Map<String, Object> map) {
json.append(BRACE_LEFT);
Iterator<String> keys = map.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
appendObj(key, map.get(key), keys.hasNext());
}
json.append(BRACE_RIGHT);
} private void appendObj(String key, Object obj, boolean hasNext) {
if (obj == null || STR_VERSION_UID.equals(key)) {
return;
}
if (key != null) {
json.append(MARKS).append(key).append(MARKS).append(COLON);
}
if (isNumber(obj)) {
appendNum(obj);
} else if (isString(obj)) {
appendString(obj.toString());
} else if (isArray(obj)) {
appendArray(obj);
} else if (isList(obj)) {
appendList((List<?>) obj);
} else if (isMap(obj)) {
appendMap2((Map<?, ?>) obj);
} else {
appendBean(obj);
}
if (hasNext) {
json.append(COMMA);
}
} private void appendBean(Object obj) {
json.append(BRACE_LEFT);
Map<String, Object> map = getBeanValue(obj);
Iterator<String> keys = map.keySet().iterator();
String key;
while (keys.hasNext()) {
key = keys.next();
appendObj(key, map.get(key), keys.hasNext());
}
json.append(BRACE_RIGHT);
} private static Map<String, Object> getBeanValue(Object obj) {
Map<String, Object> map = new HashMap<>();
try {
Field[] fields = obj.getClass().getDeclaredFields();
Object obj2;
for (Field field : fields) {
field.setAccessible(true);
obj2 = field.get(obj);
field.setAccessible(false);
if (obj2 != null) {
map.put(field.getName(), obj2);
}
}
} catch (IllegalArgumentException | IllegalAccessException e) {
//logger.error("getBeanValue faild", e);
}
return map;
} private void appendMap2(Map<?, ?> map) {
json.append(BRACKET_LEFT);
Iterator<?> keys = map.keySet().iterator();
while (keys.hasNext()) {
String key = (String) keys.next();
appendObj(key, map.get(key), keys.hasNext());
}
json.append(BRACKET_RIGHT);
} private void appendList(List<?> list) {
json.append(BRACKET_LEFT);
int len = list.size();
for (int i = 0; i < len; i++) {
appendObj(null, list.get(i), i != (len - 1));
}
json.append(BRACKET_RIGHT);
} private void appendArray(Object obj) {
json.append(BRACKET_LEFT);
int len = Array.getLength(obj);
for (int i = 0; i < len; i++) {
appendObj(null, Array.get(obj, i), i != (len - 1));
}
json.append(BRACKET_RIGHT);
} private void appendNum(Object obj) {
json.append(obj);
} private void appendString(String str) {
if (str.indexOf("\n") != -1) {
str = str.replaceAll("\\n", "\\\\n");
}
if (str.indexOf("\t") != -1) {
str = str.replaceAll("\\t", "\\\\t");
}
if (str.indexOf("\r") != -1) {
str = str.replaceAll("\\r", "\\\\r");
}
json.append(MARKS).append(str).append(MARKS);
} private static boolean isMap(Object obj) {
return obj instanceof Map;
} private static boolean isList(Object obj) {
return obj instanceof List;
} private static boolean isArray(Object obj) {
return obj.getClass().isArray();
} private static boolean isString(Object obj) {
return obj instanceof CharSequence || obj instanceof Character;
} private static boolean isNumber(Object obj) {
return obj instanceof Integer || obj instanceof Boolean || obj instanceof Double || obj instanceof Long
|| obj instanceof Byte || obj instanceof Float || obj instanceof Short;
} }
java map转json servlet response的更多相关文章
- java map 转 json 自编封装
1.自编封装代码: import com.alibaba.fastjson.JSON; import java.util.*; public class jsonConversion { privat ...
- Servlet 中利用阿里云包fastjson-1.2.43.jar把map转为Json并返回前端
1.引入fastjson-1.2.43.jar 包到lib下面,下载地址链接: https://pan.baidu.com/s/1EgAOikoG4VJRJrnUw83SNA 密码: n2fr im ...
- JSONObject.fromObject(map)(JSON与JAVA数据的转换)
JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么 ...
- java bean、List、数组、map和Json的相互转化
工程 json包为 代码 package com.my.json; public class ChildBean { private String childName; private String ...
- 转载:JSONObject.fromObject(map)(JSON与JAVA数据的转换)
转载网址:http://blog.sina.com.cn/s/blog_821025b70100wh6v.html JSON与JAVA数据的转换(JSON 即 JavaScript Object Na ...
- Java处理JSON的工具类(List、Map和JSON之间的转换)——依赖jsonlib支持Map嵌套
原文链接:http://www.itjhwd.com/java_json/ 代码 package com.itjh.mmp.util; import java.io.BufferedReader; i ...
- java处理json的工具类(list,map和json的之间的转换)
需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...
- fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map
作者:buster2014 推荐:长安散人 fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map JSON字符串与Java对象的转换 1.将Java对象或Java ...
- java fastjson:Map与json以及JSONObject ,JSONObject与String互转
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson ...
随机推荐
- JavaScript控制href属性进行钓鱼
前一阵子,发现JavaScript中允许临时改变<a>标签的href属性,当改变其属性后你点击它可能看不出有多严重,但是,它可以通过欺骗手段来诱骗用户透露他们的详细资料. // Uncom ...
- CWnd类虚函数的调用时机、缺省实现
MFC(VC6.0)的CWnd及其子类中,有如下三个函数: class CWnd : public CCmdTarget{ public: virtual BOOL PreCrea ...
- Qt应用程序图标
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt应用程序图标 本文地址:http://techieliang.com/2017/1 ...
- 多线程Worker初尝试
多线程这个概念,不知道听了多少遍.但是真滴没有去实操过. 前几天看视频听到作者说道关注技术本身,而不是总写业务代码.这几天依然思考着这个问题.于是从头开始重现了html文件的堵塞问题,重现了html文 ...
- Windows API封装:LoadLibrary/FreeLibrary
LoadLibrary/LoadLibraryEx用来加载DLL到自己的进程空间,使用完用FreeLibrary释放,一般使用方式如下: HINSTANCE hInstRich = ::Load ...
- shiro学习详解(开篇)
一.前言 要开始接触公司另外一个项目了,RX和我说了下整个项目框架的结构,其中提到权限的控制是通过shiro来处理的,对我而言又是一个全新的知识点,于是今天花了一点时间去学习shiro的使用,看了好几 ...
- BZOJ3992:[SDOI2015]序列统计——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3992 https://www.luogu.org/problemnew/show/P3321 小C ...
- BZOJ4571:[SCOI2016]美味——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4571 https://www.luogu.org/problemnew/show/P3293 一家 ...
- bzoj 2588 Count on a tree 解题报告
Count on a tree 题目描述 给定一棵\(N\)个节点的树,每个点有一个权值,对于\(M\)个询问\((u,v,k)\),你需要回答\(u\) \(xor\) \(lastans\)和\( ...
- selenium - webdriver - Keys类(键盘操作)
Keys()类提供了键盘上几乎所有按键的方法,这个类可用来模拟键盘上的按键,包括各种组合键,如 Ctrl+A, Ctrl+X,Ctrl+C, Ctrl+V 等等 from selenium impor ...