Android使用fastjson庫解析json字符串實(shí)戰(zhàn)
隨著移動(dòng)應(yīng)用的普及和數(shù)據(jù)交互的需求增加,開發(fā)人員需要使用一種高效、便捷的方式來進(jìn)行數(shù)據(jù)的序列化和反序列化。 fastjson是一個(gè)Java語言編寫的高性能功能完善的 JSON庫。它采用一種“假定有序快速匹配”的算法,把JSON Parse的性能提升到極致,是目前Java語言中最快的JSON庫。Fastjson接口簡單易用,已經(jīng)被廣泛使用在緩存序列化、協(xié)議交互、Web輸出、Android客戶端等多種應(yīng)用場景。
什么是Fastjson
Fastjson是由阿里巴巴集團(tuán)開發(fā)的一款開源JSON庫。它提供了一種簡單且高效的方式來處理JSON數(shù)據(jù),包括JSON的序列化和反序列化。在Android開發(fā)中,F(xiàn)astjson被廣泛應(yīng)用于網(wǎng)絡(luò)請(qǐng)求、數(shù)據(jù)緩存、數(shù)據(jù)解析等場景。
Fastjson具有以下特點(diǎn):
快速高效:Fastjson采用了一系列優(yōu)化手段,使得它在JSON的序列化和反序列化過程中具有很高的性能。
易于使用:Fastjson提供了簡單的API,開發(fā)人員可以輕松地進(jìn)行JSON數(shù)據(jù)的處理。
支持靈活的格式化:Fastjson支持自定義序列化和反序列化規(guī)則,可以滿足不同場景下的需求。
廣泛應(yīng)用:Fastjson在阿里巴巴集團(tuán)以及許多其他公司的移動(dòng)應(yīng)用中被廣泛使用。
fastjson使用快速入門示例
1、在Android項(xiàng)目中使用Fastjson,可以通過以下方式進(jìn)行安裝和導(dǎo)入:
dependencies { implementation 'com.alibaba:fastjson:1.2.73' }
2、在MainActivity.java文件中添加如下代碼
import android.os.Bundle; import android.util.Log; import androidx.appcompat.app.AppCompatActivity; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private String jsonStr; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); jsonStr = "{\n" + " \"name\": \"Tom\",\n" + " \"age\": 21,\n" + " \"score\": {\n" + " \"math\": 90,\n" + " \"english\": 87\n" + " },\n" + " \"hobby\": [\n" + " \"study\",\n" + " \"write\",\n" + " \"run\"\n" + " ]\n" + "}"; //將Json字符串轉(zhuǎn)換為Java對(duì)象 Student student = JSON.parseObject(jsonStr, Student.class); Log.i("MainActivity", "name=" + student.getName()); Log.i("MainActivity", "age=" + student.getAge()); //獲取Json對(duì)象 JSONObject jsonObject = JSON.parseObject(jsonStr); int mathScore = jsonObject.getJSONObject("score").getIntValue("math"); Log.i("MainActivity", "mathScore=" + mathScore); //獲取Json數(shù)組 JSONArray jsonArray = jsonObject.getJSONArray("hobby"); for (int i = 0; i < jsonArray.size(); i++) { String hobby = jsonArray.get(i).toString(); Log.i("MainActivity", "hobby=" + hobby); } //將Java對(duì)象轉(zhuǎn)換為Json字符串 Student newStudent = new Student("Bob", 23); String newJsonStr = JSON.toJSONString(newStudent); Log.i("MainActivity", "newJsonStr=" + newJsonStr); } }
3、新建Student.java文件并定義如下Java Bean類
public class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
4、運(yùn)行程序并查看輸出結(jié)果,效果如下
name=Tom age=21 mathScore=90 hobby=study hobby=write hobby=run newJsonStr={"age":23,"name":"Bob"}
三、 fastjson常用API介紹
1、將Json字符串轉(zhuǎn)換為Java對(duì)象
String jsonStr = "{\"name\":\"Tom\", \"age\":21}"; Student student = JSON.parseObject(jsonStr, Student.class);
2、將Java對(duì)象轉(zhuǎn)換為Json字符串
Teacher teacher = new Teacher("Lily", 35); String jsonStr = JSON.toJSONString(teacher); Log.i(TAG, jsonStr);
3、獲取JsonObject對(duì)象
String jsonStr = "{\"name\":\"Tom\", \"age\":21}"; JSONObject jsonObject = JSON.parseObject(jsonStr); String name = jsonObject.getString("name"); int age = jsonObject.getIntValue("age");
4、獲取JsonArray數(shù)組
String jsonStr = "[{\"name\":\"Tom\", \"age\":21},{\"name\":\"Jerry\", \"age\":23}]"; JSONArray jsonArray = JSON.parseArray(jsonStr); for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String name = jsonObject.getString("name"); int age = jsonObject.getIntValue("age"); Log.i(TAG, "name=" + name + ", age=" + age); }
5、序列化和反序列化null對(duì)象
// 將null轉(zhuǎn)化為JSON字符串 String nullJson = JSON.toJSONString(null); Log.i(TAG, "nullJson=" + nullJson); //null // 將null值的JSON字符串轉(zhuǎn)化為Object對(duì)象 Object nullObject = JSON.parse(nullJson); Log.i(TAG, "nullObject=" + nullObject); //null // 將Java對(duì)象序列化為JSON字符串 Student student = null; String studentJson = JSON.toJSONString(student, SerializerFeature.WriteNullStringAsEmpty); Log.i(TAG, "studentJson=" + studentJson); //{"name":"","age":0,null:null} // 將JSON字符串反序列化為Java對(duì)象 Student newStudent = JSON.parseObject(studentJson, Student.class); Log.i(TAG, "newStudent.getName()=" + newStudent.getName()); //"" Log.i(TAG, "newStudent.getAge()=" + newStudent.getAge()); //0 Log.i(TAG, "newStudent.getInfo()=" + newStudent.getInfo()); //null
四、 fastjson使用技巧
1、解析復(fù)雜Json對(duì)象
String jsonStr = "{\n" + " \"error\": 0,\n" + " \"reason\": \"成功\",\n" + " \"result\": {\n" + " \"stat\": \"1\",\n" + " \"list\": [\n" + " {\n" + " \"stationno\": \"1\",\n" + " \"content\": \"好孩子\"\n" + " },\n" + " {\n" + " \"stationno\": \"2\",\n" + " \"content\": \"天才\"\n" + " }\n" + " ]\n" + " }\n" + "}"; JSONObject jsonObject = JSON.parseObject(jsonStr); JSONObject result = jsonObject.getJSONObject("result"); JSONArray jsonArray = result.getJSONArray("list"); List<Station> stationList = new ArrayList<>(); for (int i = 0; i < jsonArray.size(); i++) { JSONObject obj = jsonArray.getJSONObject(i); Station station = JSON.toJavaObject(obj, Station.class); stationList.add(station); } Log.i(TAG, stationList.toString());
2、序列化和反序列化不同類型的對(duì)象
String jsonStr = "{\"name\":\"Tom\",\"value\":50}"; Object obj = JSON.parse(jsonStr); if (obj instanceof Map) { //反序列化為Map對(duì)象 Map<String, Object> map = (Map<String, Object>) obj; Log.i(TAG, map.get("name").toString() + "-" + map.get("value").toString()); } else if (obj instanceof MyObject) { //反序列化為Java對(duì)象 MyObject myObject = (MyObject) obj; Log.i(TAG, myObject.getName() + "-" + myObject.getValue().toString()); } MyObject myObject = new MyObject("John", 30); String jsonText = JSON.toJSONString(myObject); Log.i(TAG, jsonText); //{"content":["John",30]} MyObject myObject2 = JSON.parseObject(jsonText, MyObject.class); Log.i(TAG, myObject2.getName() + "-" +myObject2.getValue().toString());
五、總結(jié)
fastjson是Android開發(fā)中解析json數(shù)據(jù)的利器。我們通過上述內(nèi)容的學(xué)習(xí),可以將json字符串快速轉(zhuǎn)化成Java對(duì)象,結(jié)合快速入門中的示例,使你可以無縫的將Json格式數(shù)據(jù)序列化和反序列化。fastjson就是Java語言下用于解析json字符串的類庫,它提供了豐富的API,可以幫助開發(fā)人員輕松解析json字符串。
到此這篇關(guān)于Android使用fastjson庫解析json字符串實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)Android使用fastjson庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android5.1 取消錄制屏幕跳出的權(quán)限對(duì)話框問題
這篇文章主要介紹了Android5.1 取消錄制屏幕跳出的權(quán)限對(duì)話框問題,需要的朋友可以參考下2017-04-04Android自定義帶有圓形進(jìn)度條的可長按控件功能
這篇文章主要介紹了Android自定義帶有圓形進(jìn)度條的可長按控件,思路很簡單,使用簡單的畫筆工具就可以完成這個(gè)控件,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-06-06解決VSCode調(diào)試react-native android項(xiàng)目錯(cuò)誤問題
這篇文章主要介紹了VSCode調(diào)試react-native android項(xiàng)目錯(cuò)誤解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12Android根據(jù)包名停止其他應(yīng)用程序的方法
這篇文章主要介紹了Android根據(jù)包名停止其他應(yīng)用程序,需要的朋友可以參考下2020-03-03Android實(shí)現(xiàn)小米相機(jī)底部滑動(dòng)指示器
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)小米相機(jī)底部滑動(dòng)指示器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04Android 超詳細(xì)講解fitsSystemWindows屬性的使用
fitsSystemWindows屬性可以讓view根據(jù)系統(tǒng)窗口來調(diào)整自己的布局;簡單點(diǎn)說就是我們?cè)谠O(shè)置應(yīng)用布局時(shí)是否考慮系統(tǒng)窗口布局,這里系統(tǒng)窗口包括系統(tǒng)狀態(tài)欄、導(dǎo)航欄、輸入法等,包括一些手機(jī)系統(tǒng)帶有的底部虛擬按鍵2022-03-03Android實(shí)現(xiàn)網(wǎng)易新聞客戶端側(cè)滑菜單(2)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)網(wǎng)易新聞客戶端側(cè)滑菜單第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android string-array數(shù)據(jù)源簡單使用
這篇文章主要介紹了Android string-array數(shù)據(jù)源簡單使用的相關(guān)資料,需要的朋友可以參考下2016-09-09