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. 利用闭包判断Dom元素和滚动条的方向

    本文收集整理自网上. 一,判断滚动条的方向,利用闭包首先保存滚动条的位置,然后当滚动时候不断更新滚动初始值,然后通过差指判断方向 function scroll(fn) { //利用闭包判断滚动条滚动 ...

  2. js图片转换为base64

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. CentOS 7 开放防火墙端口

    我:最近在使 CentOS 7时发现在本地不能访问linux上8080端口,以上是我的操作,修改后访问成功 CentOS 7 开放防火墙端口 命令 最近公司新的server要求用CentOS7, 发现 ...

  4. Jenkins系列-Jenkins升级、迁移和备份

    升级Jenkins Jenkins的开发迭代非常快,每周发布一个开发版本,长期支持版每半年更新一次(ps:大版本更新).如此频繁的更新,怎么升级呢? war:下载新版的war文件,替换旧版本war文件 ...

  5. MAC锁屏不断网(快捷键启用屏保)

    第一步:要设定锁定输入密码的设置,进入'系统偏好设置''安全性与隐私',将选项'进入睡眠或开始屏幕保护程序后'打勾,选'立即'. 第二步:到'launchpad'中的'其他'文件夹打开'Automat ...

  6. BZOJ 2303 方格染色(带权并查集)

    要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...

  7. BZOJ4028 HEOI2015公约数数列(分块)

    前缀gcd的变化次数是log的,考虑对每一种gcd查询,问题变为查询一段区间是否存在异或前缀和=x/gcd. 无修改的话显然可以可持久化trie,但这玩意实在没法支持修改.于是考虑分块. 对于每一块将 ...

  8. [HNOI2007][BZOJ1185] 最小矩形覆盖 [凸包+旋转卡壳]

    题面 BZOJ题面 前置芝士 建议先学习向量相关的计算几何基础 计算几何基础戳这里 思路 用这道题学习一下凸包和旋转卡壳 首先是凸包部分 凸包 求凸包用的算法是graham算法 算法流程如下: 找到$ ...

  9. AOJ 7.Redraiment猜想

    Redraiment猜想 Description redraiment在家极度无聊,于是找了张纸开始统计素数的个数. 设函数f(n)返回从1->n之间素数的个数. redraiment发现: f ...

  10. javascript实现deepEqual和shallowEqual

    function deepEqual(x, y) { if (x === y) { return true; } if (!(typeof x == "object" && ...