如何在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
相关产品推荐
相关产品推荐

