Fastjson--拼接复杂嵌套Json
后端向前端需要返回一个如下格式的json格式数据
{
"status":"200",
"message":"登录成功",
"user-info":{
"username":"student"
"identity":"3",
"password":"123456",
"class-id":"1"
}
}
这是我最近在写的一个项目的后端的LoginServlet的返回数据
起初返回的数据为
{
"status":"200",
"message":"登录成功",
"username":"student"
"identity":"3",
"password":"123456",
"class-id":"1"
}
后面在前端获得数据的时候,想将user-info内部的信息改为获取如上
原本方法为通过Hashmap类实例化一个map对象,添加数据后,通过fastjson框架直接转换为Json数据
原代码
HashMap<String, String> BackData = new HashMap<String, String>();
BackData.put("status", "201");
BackData.put("message", "登陆成功");
BackData.put("name", s1.getStudent_Name());
BackData.put("identity", "3");
BackData.put("class", s1.getClass_ID());
BackData.put("number", s1.getStudent_Number());
BackData.put("password", s1.getStudent_Password());
起初的想法是很天真美好的将数据先存入一个map中转为JsonString
然后添加到原来的map中测试后发现转义的问题!
后查询文章后发现FastJson有两大主要类 JSONObject(表示Json对象)与JSONArray(表示Json数据组)
我们来复习一下JSON对象与JSON数组:
//JSON对象 在大括号 {} 中书写:
{key1 : value1, key2 : value2, ... keyN : valueN }
//JSON数组 在中括号 [] 中书写:
[
{ key1 : value1-1 , key2:value1-2 },
{ key1 : value2-1 , key2:value2-2 },
{ key1 : value3-1 , key2:value3-2 },
...
{ keyN : valueN-1 , keyN:valueN-2 },
]
JSON数组只能添加{}的元素而不能直接添加键值对
于是在JSONArray中只有add()方法来添加Object类型对象
而JSONObject是一个对象,不能容纳/添加其他对象只有put()方法来添加键值对。
有意思的是JSONObect的put(String key,Object value) value也正好能是JSONArray类型
正确代码
JSONArray UserInfo = new JSONArray();
UserInfo.add(s1); //FastJson会自动将实体类自动转为json对象
jsonObject.put("code",200);
jsonObject.put("message","查询成功");
jsonObject.put("user-info",UserInfo);
//发送 biu!
response.getWriter().print(jsonObject.toJSONString());
response.getWriter().flush();
成功截图:
写代码的一点小插曲/(ㄒoㄒ)/~~
JSONArray与JsonArray
总结
大概是对JSON数据格式使用还是太少
后面大概要从头补习 计算机网络 数据结构 计算机组成原理了吧。。。。。。。
参考文章:
https://www.cnblogs.com/gocode/p/parse-key_value-without-entity-and-concat-nested-json-by-fastjson.html