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的更多相关文章

  1. java map 转 json 自编封装

    1.自编封装代码: import com.alibaba.fastjson.JSON; import java.util.*; public class jsonConversion { privat ...

  2. Servlet 中利用阿里云包fastjson-1.2.43.jar把map转为Json并返回前端

    1.引入fastjson-1.2.43.jar 包到lib下面,下载地址链接: https://pan.baidu.com/s/1EgAOikoG4VJRJrnUw83SNA  密码: n2fr im ...

  3. JSONObject.fromObject(map)(JSON与JAVA数据的转换)

    JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么 ...

  4. java bean、List、数组、map和Json的相互转化

    工程 json包为  代码 package com.my.json; public class ChildBean { private String childName; private String ...

  5. 转载:JSONObject.fromObject(map)(JSON与JAVA数据的转换)

    转载网址:http://blog.sina.com.cn/s/blog_821025b70100wh6v.html JSON与JAVA数据的转换(JSON 即 JavaScript Object Na ...

  6. Java处理JSON的工具类(List、Map和JSON之间的转换)——依赖jsonlib支持Map嵌套

    原文链接:http://www.itjhwd.com/java_json/ 代码 package com.itjh.mmp.util; import java.io.BufferedReader; i ...

  7. java处理json的工具类(list,map和json的之间的转换)

    需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...

  8. fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map

    作者:buster2014 推荐:长安散人 fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map JSON字符串与Java对象的转换 1.将Java对象或Java ...

  9. java fastjson:Map与json以及JSONObject ,JSONObject与String互转

    import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson ...

随机推荐

  1. C# Excel2007 导出生成 2003兼容格式

    //导出2007格式 AppWb.Saved = true; //保存工作薄 AppExcel.ActiveWorkbook.SaveCopyAs(FilePath); //导出2003格式 AppW ...

  2. 【Mysql】- Mysql 8.0正式版新亮点

    MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 注意:从 MySQL 5.7 升级到 MySQL 8 ...

  3. Nautilus-Share-Message: Called "net usershare info" but it failed: Failed to

    See what nautilus processes are running : ps aux | grep nautilus Kill all nautilus processes you see ...

  4. 2019 front end jobs collection

    2019 front end jobs collection Alibaba https://ant.design/docs/spec/work-with-us-cn https://www.yuqu ...

  5. Delphi 自定义窗体(最大化、最小化、关闭、窗体的移动)

    Uses ShellAPI; 1.//最小化procedure TForm1.btn1Click(Sender: TObject);var  I, J, X, Y: Word;begin  //第一种 ...

  6. js 关键字 in 判断 一个属性或方法是否属于一个对象

    判断对象是否为数组/对象的元素/属性: 格式:(变量 in 对象)......注意,,, 当“对象”为数组时,“变量”指的是数组的“索引”: 当“对象”为对象是,“变量”指的是对象的“属性”. 判断 ...

  7. 用select模拟一个socket server

    1, 必须在非阻塞模式下,才能实现IO的多路复用,否则一个卡住就都卡住了.(单线程下的多路复用) 先检测自己,现在没有客户端连进来,所以会卡住. # 用select去模拟socket,实现单线程下的多 ...

  8. CentOS 安装MariaDB

    1.安装 #同时安装mariadb和mariadb-server [root@bigdata-senior01 yum.repos.d]# yum -y install mariadb mariadb ...

  9. redux样板代码简化写法

    直接使用redux,要写很多样板代码,大量的actiontype,actionCreator.一个异步的方法要写三个actiontype,三个actionCreator,十分繁琐.下面是本人使用的一种 ...

  10. [APIO2017]商旅

    link 这题卡我精度,调了一晚上才调对,因为没有想到图还可以不连通 其实可以预处理出好多东西,距离($dis(u,v)$),买卖物品(从$u$到$v$买卖物品的最大利润,例($max{S_{u,i} ...