2021年4月

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中测试后发现转义的问题!

image-20210417015731678

后查询文章后发现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();
成功截图:

image-20210417014355171

写代码的一点小插曲/(ㄒoㄒ)/~~

JSONArray与JsonArray

image-20210417014229124

总结

大概是对JSON数据格式使用还是太少

后面大概要从头补习 计算机网络 数据结构 计算机组成原理了吧。。。。。。。

参考文章:

https://www.cnblogs.com/gocode/p/parse-key_value-without-entity-and-concat-nested-json-by-fastjson.html

这里是Rogister的个人博客

我是?

  • 天天写BUG的CS专业本科在读生
  • N2至今还没通过的ちゅごくじん
  • 半夜追番追剧的狂热者
  • 喜欢写BUG、旅游、沉迷ACG(SoulWorker专念中)、拍Vlog

这里你能找到

  • 我的一些生活碎碎念、旅游日志
  • 当然也会发些技术向文章

为什么叫Rogister

  • Register-Rogister?
  • ROG!!Republic Of Gamers

最后,感谢幸运的你找到了我的博客

接下来,一切即将准备就绪........