• JSON数组对象和JSON字符串的转化,map和JSON对象之间的转化


    前后端数据传输的原理解析:

    参考博客:https://blog.csdn.net/u010900754/article/details/51395529

    因为前端(常用的是js),语言是一种弱类型语言,后端假设用的是java,所以这两种语言之间就没有完全对应的数据类型,这在传数据的时候,就会需要一个中间的规则或者协议,来规范数据类型。

    一般会使用JSON来将数据打包之后,作为中间媒介,然后分别在前端和后端转化成相应的数据类型。

    再来看为甚是字符串类型的,那是因为前后端的通信都是通过网络层进行(简单点的有http协议),网络层不管接受到什么数据类型,都会看做是字符串。

    接下来就是,前后端对数据的解析:

    这种用法包括前端和后端:

    前端:

    1. 转化为JSON对象方便操作(将json的字符串转化为js中的对象)  

    var jsonObj = JSON.parse(str);

    得到的是一个json数组对象(js中对应的数据对象),可以通过

    for (var key in jsonObj){}  

    来遍历数组中的每个对象,其中key表示键,jsonObj[key]表示key所对应的值。

    问题记载:

    在项目中遇到使用这种遍历方式的时候,在最后会出现一个key=“remove”,value=“undefined”的键值对(业务逻辑中并没有),然后换成遍历数组的方式就不会出现这种问题了:

    //jsonObj是一个json对象组成的数组,每个json对象由多个键值对组成
    for (var i = 0; i < jsonObj.length; i++) {
             console.log(jsonObj[i].key); //遍历每个json对象中的某一个字段
    }

    2. 转化为字符串(将js对象转化成一个json的string类型)  

    var jsonStr = JSON.stringify(jsonObj)   ---------->(常用于Ajax中,将返回的对象数据,转化为字符串)

    后端:需要用到阿里的fastjson包(其他的用法可以参考博客:https://blog.csdn.net/zknxx/article/details/52281220

    在java中,有JSONObject和JSONArray两个对象,转string就用它们的toString()函数;转对象,就用toBean()和toArray()函数。需要注意的是JSONObject必须是string的键。

    3. map对象转化为 json字符串对象  

    String json=JSON.toJSONString(map);

    4. json对象转化为map对象  

    Map map = JSON.parseObject(json);

     其他问题搜集:

    1、https://blog.csdn.net/AinUser/article/details/82226738(json格式,key值一定要用 双引号 包起来)

    2、https://blog.csdn.net/a_bang/article/details/51847810(给key添加双引号的方式,没试^o^)

    问题记载:

    后端传来的数据是一般Java格式的对象列表,在传到前端进行解析的时候,怎么也解析不对,上面的两条就是遇到的问题。

    最后的解决方案是:

    在后端就将数据转化为JSON格式(需要导入net.sf.json-lib包,如果在后端是List,则需要JSONArray.fromObject转化成js数组,因为在前端解析的是JSON字符串,所以还需要将JSONArray使用toJSONString转化为字符串),

    在前端正常解析即可(JSON.parse)。

    --------------------------这里分割线------------------------------

    前期在做项目的过程中,遇到了不少类型的前后端数据传输和转化的问题,可能还会有理解不到位的地方,

    所以,文章经过一次又一次的编辑和修改,希望对自己和遇到问题的各位能有帮助。

  • 相关阅读:
    BZOJ1864: [Zjoi2006]三色二叉树
    2019牛客全国多校训练四 I题 string (SAM+PAM)
    2019杭电多校第二场
    HDU5919 Sequence II(主席树)
    2019牛客全国多校训练三 题解
    2019牛客多校第二场
    2019 杭电多校第一场 题解
    2019 牛客全国多校一
    POJ3261 Milk Patterns(后缀数组)
    POJ1743 Musical Theme (后缀数组 & 后缀自动机)最大不重叠相似子串
  • 原文地址:https://www.cnblogs.com/Archie2018/p/12066870.html
Copyright © 2020-2023  润新知