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

修改内部存储JSON数组单值时其余对象丢失的问题排查

问题原因及修正方案

核心问题

你代码里的关键错误是:修改完数组内的对象后,只将单个修改后的对象写入文件,而非整个更新后的JSON数组。

具体逻辑问题:

  • 你成功读取了完整的JSON数组到jsonarr,也正确修改了指定位置对象的sammelstatus字段(JSON对象是引用类型,修改后会同步到原数组中)
  • 但最后执行file.writeText(jsonObject.toString())时,仅把这个单个对象的JSON字符串写入文件,直接覆盖了原本包含222个对象的数组内容,导致其余对象全部丢失。

修正后的代码

把写入文件的内容换成整个JSON数组的字符串即可:

fun writeJsonToInternalStorage(pos: Int) {
    try {
        val file = File(this.filesDir, "stempel.json")

        if (file.exists()) {
            val jsonString = file.readText()
            val jsonarr = JSONArray(jsonString)
            val jsonObject = jsonarr.getJSONObject(pos)
            jsonObject.put("sammelstatus", 1)
            // 改为写入整个更新后的数组
            file.writeText(jsonarr.toString())
        }
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

可选优化

如果需要写入格式化后的JSON(方便人工阅读),可以借助Gson库生成带缩进的字符串:

// 先在build.gradle添加依赖
implementation 'com.google.code.gson:gson:2.10.1'

// 修改写入逻辑
val gson = GsonBuilder().setPrettyPrinting().create()
file.writeText(gson.toJson(jsonarr))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:22:49