Android内部存储中如何用Kotlin向JSON数组文件追加JSON对象
Android内部存储JSON文件追加对象的正确实现
直接用MODE_APPEND向JSON文件追加字符串会破坏数组结构——它只是把新内容直接拼在文件末尾,导致最终出现[]{"item1":...}这种无效JSON格式。正确的做法是先读取并解析现有JSON数组,添加新对象后再整体写入文件。
实现步骤
- 检查目标文件是否存在,读取现有内容并解析为
JSONArray - 将新的
JSONObject添加到数组中 - 将更新后的
JSONArray写入文件(覆盖原文件以保证格式合法)
完整Kotlin代码
import org.json.JSONArray import org.json.JSONObject import java.io.File import java.io.FileInputStream import java.io.FileOutputStream // 向内部存储的JSON文件追加对象 fun appendToJsonFile(fileName: String, newObj: JSONObject) { val targetFile = File(filesDir, fileName) // 初始化或读取现有JSON数组 val jsonArray = when { targetFile.exists() && targetFile.length() > 0 -> { val inputStream = FileInputStream(targetFile) val fileContent = inputStream.bufferedReader().use { it.readText() } inputStream.close() JSONArray(fileContent) } else -> JSONArray() // 文件不存在或为空时创建空数组 } // 添加新对象到数组 jsonArray.put(newObj) // 写入更新后的JSON数组(带缩进格式化,方便查看) val outputStream = FileOutputStream(targetFile) outputStream.write(jsonArray.toString(2).toByteArray()) outputStream.close() }
使用示例
// 创建要追加的JSON对象 val newNote = JSONObject().apply { put("item1", "value1") put("item2", "value2") put("item3", "value3") } // 追加到notes.txt文件(注意文件名要和创建时一致) appendToJsonFile("notes.txt", newNote)
关键注意点
- 文件名统一:你之前创建文件用的是
notes.txt,追加时误写为jsonfile.json,这会导致找不到原文件,必须保持文件名一致 - 避免手动拼接JSON:依赖
JSONArray和JSONObject类处理结构,杜绝手动拼接字符串引发的格式错误 - 格式化输出:
JSONArray.toString(2)会生成带缩进的JSON内容,便于调试和查看
内容的提问来源于stack exchange,提问作者BinaryVigilante
相关产品推荐
相关产品推荐

