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)。

 

--------------------------這里分割線------------------------------

 

前期在做項目的過程中,遇到了不少類型的前后端數據傳輸和轉化的問題,可能還會有理解不到位的地方,

所以,文章經過一次又一次的編輯和修改,希望對自己和遇到問題的各位能有幫助。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM