JSONObject與java字符串拼接json的區別

背景

事情的起因是這樣的。最近正在調試Socket.io的Android端接口。自己找到的Socket.io的Android的官方資料只是簡單的字符串傳遞,而後臺的接口則是一次性傳遞多組鍵值對參數,考慮到js的字典可以用類似json鍵值對來初始化,我就把參數直接拼接成了字符串進行測試。拼接方式如下

String str = "{\"key\":"+value+"}";

也就是使用最普通的java拼接字符串的方式,其中對字符串中的引號做了轉義處理。這也發送到js服務端,打印信息可以打印出{“key”:”value}這樣的字符串,但是js服務端並不能通過字典方式由鍵獲取到值,而是直接當作字符串處理。

嘗試多種方式之後,發現直接使用JSONObject,用put方法添加鍵值對,這樣服務端就可以正確將參數解釋爲字典類型,同時我們在服務端打印數據時可以發現js將這些數據解析爲Object類型,而不是我們之前所見字符串。

這說明JSONObject生成的json與我們直接拼寫的是有區別的,這樣在Socket.io的Android的sdk中對這個參數的處理方式肯定也不相同,眼見爲實,現在我們打印一下處理完畢後即將發送的參數,看看兩者有什麼區別。

這裏寫圖片描述
如圖 前面一個json是JSONObject生成的json,而第二個是我們手動生成的,可以清楚發現,轉意字符也在其中,通過網絡流直接發送到服務端,服務端是無法直接用這些帶轉意字符的字符串創建字典數據的,但是這並不影響當做字符串打印。另外,如果我們將JSONObject對象進行toString操作,將生成的字符串當做參數傳入,同樣會引入轉義字符,也是不可取的。

結論

在進行數據傳輸使用json時,我們儘可能使用JSONObject進行json生成,手動生成可能會引入其他轉移字符活着多餘的引號而導致其他一些問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章