导入jar包
fastjosn
编写测试类
对象转JSON
/*
* 对象转JSON
*/
@Test
public void run1() {
Person p = new Person();
p.setNo(1);
p.setName("Jake");
p.setHeight(1.78);
// 如果对于引用类型没有值 该属性不会参与转换
String obj2json = JSON.toJSONString(p);
System.out.println(obj2json);
// 输出结果 {"height":1.78,"name":"jake","no":1}
}
List 对象集合 转JSON
Person p = new Person();
p.setNo(1);
p.setName("Jake");
p.setHeight(1.78);
Person p2 = new Person();
p2.setNo(2);
p2.setName("rose");
p2.setHeight(1.48);
List<Person> list = new ArrayList<Person>();
list.add(p);
list.add(p2);
// SerializerFeature.DisableCircularReferenceDetect 常量禁止循环引用
// 解决集合中存在多个相同的Obj 输出结果中有引用 客户端无法解析
String list2json = JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect);
System.out.println(list2json);
解决由于使用了禁止循环引用引发的问题
场景:当一个list集合存放的对象,互相有个属性引用彼此解析会报错。
image.png
/*
* 由于禁止了循环引用引发的新问题
*
*/
@Test
public void run4() {
Person p = new Person();
p.setNo(1);
p.setName("Jake");
p.setHeight(1.78);
Role role = new Role();
role.setRname("coderhong");
// 循环引用
role.setRperson(p);
p.setpRole(role);
List<Object> list = new ArrayList<Object>();
list.add(p);
list.add(role);
// 禁止循环引用
System.out.println(JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect));
解决方案。在一方加上注解@JSONField(serialize=false)
image.png提供一个工具类:FastJsonUtils.java
/**
* 将对象转成json串
* @param object
* @return
*/
public static String toJSONString(Object object){
//DisableCircularReferenceDetect来禁止循环引用检测
return JSON.toJSONString(object,SerializerFeature.DisableCircularReferenceDetect);
}
//输出json
public static void write_json(HttpServletResponse response,String jsonString)
{
response.setContentType("application/json;utf-8");
response.setCharacterEncoding("UTF-8");
try {
response.getWriter().print(jsonString);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* ajax提交后回调的json字符串
* @return
*/
public static String ajaxResult(boolean success,String message)
{
Map map=new HashMap();
map.put("success", success);//是否成功
map.put("message", message);//文本消息
String json= JSON.toJSONString(map);
return json;
}
/**
* JSON串自动加前缀
* @param json 原json字符串
* @param prefix 前缀
* @return 加前缀后的字符串
*/
public static String JsonFormatterAddPrefix(String json,String prefix,Map<String,Object> newmap)
{
if(newmap == null){
newmap = new HashMap();
}
Map<String,Object> map = (Map) JSON.parse(json);
for(String key:map.keySet())
{
Object object=map.get(key);
if(isEntity(object)){
String jsonString = JSON.toJSONString(object);
JsonFormatterAddPrefix(jsonString,prefix+key+".",newmap);
}else{
newmap.put(prefix+key, object);
}
}
return JSON.toJSONString(newmap);
}
/**
* 判断某对象是不是实体
* @param object
* @return
*/
private static boolean isEntity(Object object)
{
if(object instanceof String )
{
return false;
}
if(object instanceof Integer )
{
return false;
}
if(object instanceof Long )
{
return false;
}
if(object instanceof java.math.BigDecimal )
{
return false;
}
if(object instanceof Date )
{
return false;
}
if(object instanceof java.util.Collection )
{
return false;
}
return true;
}
}
网友评论