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

如何向JSON对象添加新属性并写入文件?(附读取代码示例)

如何为JSON对象添加新属性并写入文件?

我来一步步帮你搞定这个需求,结合你已经写的读取代码,咱们分三个核心步骤来实现:


1. 补全读取逻辑,获取完整JSON字符串

你已经写了一部分读取raw资源的代码,先把它补全,把字节流转换成可用的JSON字符串:

InputStream inputStream = getResources().openRawResource(R.raw.quote);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int ctr;
try {
    ctr = inputStream.read();
    while (ctr != -1) {
        byteArrayOutputStream.write(ctr);
        ctr = inputStream.read();
    }
    inputStream.close();
    // 将字节流转换为JSON字符串
    String jsonString = byteArrayOutputStream.toString();
    byteArrayOutputStream.close();

    // 接下来在这里处理JSON解析和修改
} catch (IOException e) {
    e.printStackTrace();
}

2. 解析JSON并添加新属性

Android自带了org.json库,不用额外依赖就能轻松解析和修改JSON。下面演示两种常见的添加场景:

给每个成员对象添加属性

比如给members数组里的每个成员加age和isVerified属性:

try {
    // 解析根JSON对象
    JSONObject rootObj = new JSONObject(jsonString);
    // 获取members数组
    JSONArray membersArray = rootObj.getJSONArray("members");

    // 遍历数组,逐个修改成员对象
    for (int i = 0; i < membersArray.length(); i++) {
        JSONObject memberObj = membersArray.getJSONObject(i);
        // 添加数值类型属性
        memberObj.put("age", 28);
        // 添加布尔类型属性
        memberObj.put("isVerified", true);
    }

    // 将修改后的JSON转回格式化字符串(4是缩进空格数,方便阅读)
    String modifiedJsonString = rootObj.toString(4);
} catch (JSONException e) {
    e.printStackTrace();
}

给根JSON对象添加全局属性

如果要给整个JSON加全局字段(比如更新时间),直接在根对象上put即可:

// 在解析根对象后添加这行代码
rootObj.put("lastUpdated", System.currentTimeMillis());

3. 将修改后的JSON写入文件

根据你的需求选择合适的存储位置,这里提供两种常用场景的代码:

写入App内部存储(无需权限)

内部存储只有你的App能访问,适合保存私有数据:

try {
    // 打开内部存储的文件输出流,MODE_PRIVATE表示覆盖原文件
    FileOutputStream fos = openFileOutput("modified_members.json", MODE_PRIVATE);
    fos.write(modifiedJsonString.getBytes());
    fos.close();
    // 写入成功后可以提示用户操作完成
} catch (IOException e) {
    e.printStackTrace();
}

写入外部存储(需权限)

如果要让文件能被其他App访问,需要写入外部存储,注意Android 6.0+要动态申请权限:

// 先检查权限(Android 6.0+)
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
        == PackageManager.PERMISSION_GRANTED) {
    try {
        // 获取外部存储的公共文档目录
        File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        File file = new File(dir, "modified_members.json");
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(modifiedJsonString.getBytes());
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
} else {
    // 动态申请存储权限
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
            1001);
}

额外提示

  • 如果你的JSON结构复杂,也可以用Gson/Moshi这类第三方库,把JSON解析成Java实体类,修改后再序列化回JSON,代码会更简洁易维护。
  • Android 10及以上版本,外部存储推荐使用MediaStore或Scoped Storage来适配新的存储政策,避免权限问题。

内容的提问来源于stack exchange,提问作者Kavin-K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:06:07