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

