您的位置:

Android实战:使用fastjson解析JSON数据

Android实战:使用fastjson解析JSON数据

更新:

一、 fastjson简介

fastjson是一个Java语言编写的高性能和通用的JSON序列化和反序列化类库,在阿里巴巴经济体的大力推动下成长为了业内流行的JSON库,具有反序列化飞速、易用性强、准确性高、兼容性好、灵活度高的特点。

Json是一种轻量级的数据交换格式,它具有可读性强、数据格式简洁等特点,被广泛应用于网页开发、移动应用、Web API等场合。fastjson就是Java语言下用于解析json字符串的类库,它提供了丰富的API,可以帮助开发人员轻松解析json字符串。

二、快速入门

1、新建Android项目并在build.gradle文件中添加fastjson库的引用

dependencies {
    implementation 'com.alibaba:fastjson:1.2.80'
}

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字符串转换为Java对象
        Student student = JSON.parseObject(jsonStr, Student.class);
        Log.i("MainActivity", "name=" + student.getName());
        Log.i("MainActivity", "age=" + student.getAge());

        //获取Json对象
        JSONObject jsonObject = JSON.parseObject(jsonStr);
        int mathScore = jsonObject.getJSONObject("score").getIntValue("math");
        Log.i("MainActivity", "mathScore=" + mathScore);

        //获取Json数组
        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对象转换为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、运行程序并查看输出结果,效果如下

name=Tom
age=21
mathScore=90
hobby=study
hobby=write
hobby=run
newJsonStr={"age":23,"name":"Bob"}

三、常用API介绍

1、将Json字符串转换为Java对象

 String jsonStr = "{\"name\":\"Tom\", \"age\":21}";
 Student student = JSON.parseObject(jsonStr, Student.class);

2、将Java对象转换为Json字符串

Teacher teacher = new Teacher("Lily", 35);
String jsonStr = JSON.toJSONString(teacher);
Log.i(TAG, jsonStr);

3、获取JsonObject对象

String jsonStr = "{\"name\":\"Tom\", \"age\":21}";
JSONObject jsonObject = JSON.parseObject(jsonStr);
String name = jsonObject.getString("name");
int age = jsonObject.getIntValue("age");

4、获取JsonArray数组

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对象

// 将null转化为JSON字符串
String nullJson = JSON.toJSONString(null);
Log.i(TAG, "nullJson=" + nullJson); //null

// 将null值的JSON字符串转化为Object对象
Object nullObject = JSON.parse(nullJson);
Log.i(TAG, "nullObject=" + nullObject); //null

// 将Java对象序列化为JSON字符串
Student student = null;
String studentJson = JSON.toJSONString(student, SerializerFeature.WriteNullStringAsEmpty);
Log.i(TAG, "studentJson=" + studentJson); //{"name":"","age":0,null:null}

// 将JSON字符串反序列化为Java对象
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

四、使用技巧

1、解析复杂Json对象

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、序列化和反序列化不同类型的对象

String jsonStr = "{\"name\":\"Tom\",\"value\":50}";
Object obj = JSON.parse(jsonStr);
if (obj instanceof Map) { //反序列化为Map对象
    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对象
    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());

五、总结

fastjson是Android开发中解析json数据的利器。我们通过上述内容的学习,可以将json字符串快速转化成Java对象,结合快速入门中的示例,使你可以无缝的将Json格式数据序列化和反序列化。

如果你想要更深入了解fastjson库的功能和用法,还可以查看官方文档,用最好的工具解析最好的数据。

Android实战:使用fastjson解析JSON数据

一、 fastjson简介 fastjson是一个Java语言编写的高性能和通用的JSON序列化和反序列化类库,在阿里巴巴经济体的大力推动下成长为了业内流行的JSON库,具有反序列化飞速、易用性强、准

2023-12-08
android中json使用,安卓开发解析json

2022-11-24
fastjson代码分析,fastjson trim

本文目录一览: 1、Android json解析架包(阿里巴巴的fastjson)处理是报异常。 2、复杂json怎么使用fastjson一次性提取出来 3、Jackson和FastJson性能谁更快

2023-12-08
关于fastjson读取json文件的信息

本文目录一览: 1、fastJson解析json对象 2、复杂json怎么使用fastjson一次性提取出来 3、fastjson如何读写json文件 4、fastjson怎么解析像“ 5、FastJ

2023-12-08
fastjson详解

2023-05-20
fastjson使用详解

2023-05-23
解析android应用中的JSON数据

2023-05-14
Android JSON数据处理与解析

一、概述 随着移动设备的普及,以及大量数据的产生和处理,JSON作为一种轻量级的数据交换格式,在移动开发中也越来越广泛地被使用。本文将介绍Android中JSON数据的处理与解析,包括以下方面: 1.

2023-12-08
Java JSON解析库fastjson使用教程

2023-05-18
Fastjson解析json指南

2023-05-19
Android JSON数据解析方法分享

2023-05-14
android的json文件,android 读取json文

本文目录一览: 1、android JSON文件解析! 求指点。 2、android怎么解析json文件 3、Android 如何引用本地json文件 4、android怎么读取外部json文件 5、

2023-12-08
Android网络请求全面解析

2023-05-18
java如何接收json数据(json如何获取数据)

本文目录一览: 1、多层JSON数据,java后台如何接收 2、java怎么接收json数据 博客园 3、JAVA如何接收一组json数据? 4、java怎么接收android请求过来的json数据

2023-12-08
java获取json数据方法(json如何获取数据)

本文目录一览: 1、java怎么得到json中的数据 2、java 怎么取json 中json数据 3、java 中怎么取json对象中的数据 4、java后台怎样获取前台的json数据 5、java

2023-12-08
javabean转json的方法,java对象转json

本文目录一览: 1、android怎么将javabean转换成json 2、java中一个包含bean属性的list集合 如何转换成JSON 3、带有对象属性的bean,如何转换成json对象或者字符

2023-12-08
java实体接收json(java中实体)

本文目录一览: 1、java怎么接收json数据 博客园 2、JAVA如何接收一组json数据? 3、java怎么接收android请求过来的json数据 java怎么接收json数据 博客园 imp

2023-12-08
Android JSON解析:快速获取和提取数据

2023-05-14
android能看json吗,json android

本文目录一览: 1、json是什么格式,在安卓手机上用什么打开 2、android怎么看json数据格式? 3、android 解析json用那个包里面的方法比较好呢? 4、android 怎么看js

2023-12-08
从基础掌握到实用开发——Android学习指南

2023-05-14