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. 使用cookies模拟登陆

    http://blog.csdn.net/a1099439833/article/details/51918955 使用cookies会话跟踪,保持cookies访问,对于cookies会失效的问题可 ...

  2. Oracle基础 表分区

    Oracle基础 表分区 一.表分区 (一)表分区的分类 1.范围分区(range) 2.散列分区(hash) 3.列表分区(list) 4.复合分区:范围-哈希(range-hash).范围-列表( ...

  3. HTML5语义元素总结

    HTML5语义元素 语义=意义 语义元素=元素的意义   什么事语义元素? 一个语义元素能够清楚的描述其意义给浏览器和开发者. 无语义 元素实例:div.span.无需考虑内容. 语义 元素实例:fo ...

  4. 【刷题】BZOJ 1001 [BeiJing2006]狼抓兔子

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...

  5. POJ3581:Sequence——题解

    http://poj.org/problem?id=3581 给一串数,将其分成三个区间并且颠倒这三个区间,使得新数列字典序最小. 参考:http://blog.csdn.net/libin56842 ...

  6. git使用笔记(十二)stash

    By francis_hao    Oct 29,2017   git stash 保存当前工作目录的修改 概要 git stash list [<options>]git stash s ...

  7. JavaScript中Unicode值转字符

    在JavaScript中,将Unicode值转字符的方法: <!DOCTYPE html> <html> <head> <meta charset=" ...

  8. 组合框控件 -- CComboBox

    组合框控件 -- CComboBox 组合框其实就是把一个编辑框和一个列表框组合到了一起,分为三种:简易(Simple)组合框.下拉式(Dropdown)组合框和下拉列表式(Drop List)组合框 ...

  9. TextToast -- 自定义Toast源码

    import android.content.Context;import android.graphics.Color;import android.graphics.PixelFormat;imp ...

  10. FreeRTOS - 任务使用注意

    如果使用xTaskCreate() 创建任务,任务栈使用的是FreeRTOS heap