如何在Java中修改含连字符的JSON键对应的值?
解决JSON子对象属性修改问题
你的问题出在没有正确定位到metadata这个子JSON对象,直接在顶层JSONObject上做put操作自然会新增错误的键值对。正确的步骤是先获取metadata子对象,再修改它内部的属性,最后将修改后的JSON写回文件。
错误原因分析
- 第一种写法:
body.put(body.getJSONObject("metadata").getString("X-Object-Meta-Favourite"), action)
这里第一个参数是读取到的旧值"true",相当于在顶层JSON新增了"true": "false"的键值对,完全偏离目标。 - 第二种写法:
body.put("metadata['X-Object-Meta-Favourite']", action)
是把整个字符串当作顶层键,所以新增了"metadata['X-Object-Meta-Favourite']": "false"的顶层键值对,同样错误。
正确代码实现
public void favourite(String action) throws IOException { action = "false"; // 或者根据需求使用布尔值false:action = Boolean.FALSE.toString(); // 读取JSON文件到顶层JSONObject JSONObject body = readFiles.favourite(); // 获取metadata子JSONObject JSONObject metadata = body.getJSONObject("metadata"); // 修改metadata内部的目标属性值 metadata.put("X-Object-Meta-Favourite", action); // 将修改后的JSON写回原文件(这一步不能少,否则修改只存在于内存中) Files.write(Paths.get("src/test/resources/config/environments/FileSystem/Favourite.json"), body.toString().getBytes()); }
补充说明
- 如果需要将值改为布尔类型的
false而非字符串"false",可以直接写metadata.put("X-Object-Meta-Favourite", false);,这样JSON里的对应值会变成false(不带引号)。 - 注意方法名拼写:你原来的方法名
fovurite是拼写错误,建议修正为favourite。
内容的提问来源于stack exchange,提问作者CvMr
相关产品推荐
相关产品推荐

