Java實(shí)現(xiàn)生成JSON字符串的三種方式分享
我的安卓開發(fā)經(jīng)歷始于一個(gè)原生安卓項(xiàng)目開發(fā)。后來由于公司有個(gè)項(xiàng)目與幾家醫(yī)療設(shè)備公司合作,需要我寫安卓端的橋接代碼給 react native 端的同事調(diào)用。剛開始,對(duì)于一些流程的也不懂,直接調(diào)用 toString 就給 RN 了,給 RN 端的數(shù)據(jù)就是比如 {code=NOT_INITIALIZED, message=Please initialize library}
,導(dǎo)致 RN 端的同事需要自己寫解析代碼獲取 key 和 value,聯(lián)調(diào)麻煩。后來去研究如何轉(zhuǎn)成 json 字符串給 RN 端,聯(lián)調(diào)就順暢多了
下面以錯(cuò)誤處理返回的 code 和 message 為例,演示如何拼接 JSON 字符串
// 演示數(shù)據(jù) String code = "NOT_INITIALIZED"; String message = "Please initialize library";
手動(dòng)拼接(不推薦)
我們看 json 的結(jié)構(gòu),key 和 string 類型的 value 的都是需要前后加雙引號(hào)的,java 沒有 js 的 ''
或 ``,那怎么插入雙引號(hào)呢,答案是使用反斜杠加字符串
對(duì)于 char
和 String
變量,拼接比較麻煩
char c1 = 'c'; String s1 = "s1"; System.out.println("{" + "\"c1\":" + "\"" + c1 + "\"" + "}"); System.out.println("{" + "\"s1\":" + "\"" + s1 + "\"" + "}");
其他類型的變量,拼接就比較簡單了
boolean b1 = true; float f1 = 34f; double d1 = 33.2d; System.out.println("{" + "\"b1\":" + b1 + "}"); System.out.println("{" + "\"f1\":" + f1 + "}"); System.out.println("{" + "\"d1\":" + d1 + "}");
因此,對(duì)于上面提到的數(shù)據(jù),拼接的話就是下面這樣
String jsonStr = "{" + "\"code\":" + "\"" + code + "\"" + "," + "\"message\":" + "\"" + message + "\"" + "}";
為什么不推薦這種方式呢?數(shù)據(jù)量少還好,多了的話可能會(huì)遇到逗號(hào)忘寫,字符串忘加前后置反斜杠雙引號(hào)的情況,調(diào)試費(fèi)時(shí)間
使用 Gson 等 JSON 庫
1.定義一個(gè)數(shù)據(jù)類
class ErrorInfo { private String code; private String message; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
2.使用 Gson 的 toJson 方法
import com.google.gson.Gson; ErrorInfo errorInfo = new ErrorInfo(); errorInfo.setCode(code); errorInfo.setMessage(message); Gson gson = new Gson(); String jsonStr = gson.toJson(errorInfo);
使用 JSONObject(推薦)
import org.json.JSONObject; JSONObject jsonObject = new JSONObject(); String jsonStr = ""; try { jsonObject.put("code", code); jsonObject.put("message", message); jsonStr = jsonObject.toString(); } catch (JSONException e) { throw new RuntimeException(e); }
為了避免 try catch,我更傾向于搭配 HashMap 使用
HashMap<String, String> map = new HashMap<>(); map.put("code", code); map.put("message", message); String jsonStr = new JSONObject(map).toString();
為什么推薦這種方式呢?兩個(gè)原因,第一,使用起來比前兩種方式都方便;第二,假如你是原生開發(fā)安卓的話,那你大概率會(huì)引入一個(gè) JSON 庫來實(shí)現(xiàn)前后端配合,創(chuàng)建一個(gè)數(shù)據(jù)類搭配 GSON 可比 jsonObject.getString
使用起來方便多了,但像我司主要是 RN 項(xiàng)目,為了一個(gè)小功能而引入一個(gè)庫實(shí)在是不劃算,這時(shí)就是 JSONObject 的用武之地了
到此這篇關(guān)于Java實(shí)現(xiàn)生成JSON字符串的三種方式分享的文章就介紹到這了,更多相關(guān)Java生成JSON字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 根據(jù)某個(gè) key 加鎖的實(shí)現(xiàn)方式
日常開發(fā)中,有時(shí)候需要根據(jù)某個(gè) key 加鎖,確保多線程情況下,對(duì)該 key 的加鎖和解鎖之間的代碼串行執(zhí)行,這篇文章主要介紹了Java 根據(jù)某個(gè) key 加鎖的實(shí)現(xiàn)方式,需要的朋友可以參考下2023-03-03JAVA8 List<List<Integer>> list中再裝一個(gè)list轉(zhuǎn)成一個(gè)list操
這篇文章主要介紹了JAVA8 List<List<Integer>> list中再裝一個(gè)list轉(zhuǎn)成一個(gè)list操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08Android設(shè)備如何保證數(shù)據(jù)同步寫入磁盤的實(shí)現(xiàn)
這篇文章主要介紹了Android設(shè)備如何保證數(shù)據(jù)同步寫入磁盤的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09MyBatis注解實(shí)現(xiàn)動(dòng)態(tài)SQL問題
這篇文章主要介紹了MyBatis注解實(shí)現(xiàn)動(dòng)態(tài)SQL問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02JAVA基于數(shù)組實(shí)現(xiàn)的商品信息查詢功能示例
這篇文章主要介紹了JAVA基于數(shù)組實(shí)現(xiàn)的商品信息查詢功能,結(jié)合實(shí)例形式詳細(xì)分析了java使用數(shù)組存儲(chǔ)數(shù)據(jù)實(shí)現(xiàn)的商品信息查詢功能相關(guān)操作技巧,需要的朋友可以參考下2019-11-11關(guān)于eclipse安裝spring插件報(bào)錯(cuò)An error occurred while collecting item
這篇文章主要介紹了關(guān)于eclipse安裝spring插件報(bào)錯(cuò)An error occurred while collecting items to be installed...解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08