You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android中访问此类JSON文件及其中的数组

在Android中访问本地JSON文件并解析二维数组的方法

嘿,我来帮你搞定在Android里访问这个JSON文件并解析数组的事儿!你的my.json是一个二维数组结构,第一行是表头,后面跟着具体的血库数据,下面分步骤一步步来实现:

第一步:把JSON文件放到正确的位置

首先得确保你的JSON文件能被Android项目正确读取:

  • 在你的项目app/src/main目录下,创建一个名为assets的文件夹(如果还没有的话)
  • 将my.json文件复制到这个assets文件夹中

第二步:读取assets中的JSON文件内容

我们需要先把文件里的JSON字符串读取出来,这里提供Java和Kotlin两种实现方式:

Java实现

import android.content.Context;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

public class JsonHelper {
    public static String loadJsonFromAssets(Context context) {
        String jsonContent = null;
        try {
            InputStream inputStream = context.getAssets().open("my.json");
            int fileSize = inputStream.available();
            byte[] buffer = new byte[fileSize];
            
            inputStream.read(buffer);
            inputStream.close();
            jsonContent = new String(buffer, StandardCharsets.UTF_8);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        return jsonContent;
    }
}

Kotlin实现(扩展函数更简洁)

import android.content.Context
import java.io.IOException

fun Context.loadJsonFromAssets(): String? {
    return try {
        assets.open("my.json").bufferedReader().use { it.readText() }
    } catch (ioException: IOException) {
        ioException.printStackTrace()
        null
    }
}

第三步:解析二维JSON数组

读取到JSON字符串后,我们用Android原生的org.json库来解析这个二维数组:

Java解析示例

import org.json.JSONArray;

// 在Activity/Fragment中调用
String jsonString = JsonHelper.loadJsonFromAssets(this);
if (jsonString != null) {
    try {
        JSONArray rootArray = new JSONArray(jsonString);
        
        // 读取表头(第一行数据)
        JSONArray headerRow = rootArray.getJSONArray(0);
        for (int i = 0; i < headerRow.length(); i++) {
            String header = headerRow.getString(i);
            // 可以把表头存到列表或者直接打印
            System.out.println("表头字段: " + header);
        }
        
        // 遍历数据行(从第二行开始,索引1)
        for (int i = 1; i < rootArray.length(); i++) {
            JSONArray dataRow = rootArray.getJSONArray(i);
            String srNo = dataRow.getString(0);
            String bloodBankName = dataRow.getString(1);
            String state = dataRow.getString(2);
            String district = dataRow.getString(3);
            // 按需获取其他字段
            
            // 示例:打印血库名称
            System.out.println("血库名称: " + bloodBankName);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Kotlin解析示例

import org.json.JSONArray

// 在Activity/Fragment中调用
val jsonString = this.loadJsonFromAssets()
jsonString?.let {
    try {
        val rootArray = JSONArray(it)
        
        // 读取表头
        val headerRow = rootArray.getJSONArray(0)
        for (i in 0 until headerRow.length()) {
            val header = headerRow.getString(i)
            println("表头字段: $header")
        }
        
        // 遍历数据行
        for (i in 1 until rootArray.length()) {
            val dataRow = rootArray.getJSONArray(i)
            val srNo = dataRow.getString(0)
            val bloodBankName = dataRow.getString(1)
            val state = dataRow.getString(2)
            // 按需获取其他字段
            
            println("血库名称: $bloodBankName")
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

额外提示(可选)

  • 如果你的JSON文件体积较大,一定要在子线程中执行读取和解析操作,避免阻塞主线程导致ANR(可以用Kotlin协程、Java的Executor或者AsyncTask)
  • 如果你习惯用第三方库(比如Gson/Moshi),可以直接把二维数组映射成List<List<String>>,操作会更便捷:
// Gson示例(需先在build.gradle中添加依赖)
List<List<String>> bloodBankData = new Gson().fromJson(jsonString, new TypeToken<List<List<String>>>(){}.getType());
// 直接通过List索引获取数据
String firstBankName = bloodBankData.get(1).get(1);

内容的提问来源于stack exchange,提问作者Prabhu Bhuvaneshwar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:35:44