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

R语言使用jsonlite包导入、编辑保存JSON文件出错如何解决?

jsonlite修改JSON文件后保存失败的解决方案

问题核心原因

你出现报错的根源是重复执行了JSON序列化操作:

  • read_json读取本地JSON文件后,得到的json_list是标准R列表对象,你对列表字段的修改逻辑完全正确
  • 你先调用toJSON()将列表对象转换为了JSON格式的字符串,此时返回的json_modified自带json类属性,因此Rstudio会将其识别为JSON格式,和json_list的类型显示差异属于正常现象,不是故障原因
  • 后续你使用write_json()写入该JSON字符串时,write_json会默认对输入的R对象自动做一次JSON序列化,相当于把现成的JSON字符串又转了一次JSON格式,最终输出的文件会产生大量多余的转义字符,导致无法正常解析使用。

正确操作方案

有两种可正常运行的写法,二选一即可:

写法1:直接写入修改后的列表(推荐)

不需要手动调用toJSON,直接将修改后的列表传给write_json即可,该函数会自动完成序列化操作:

json_list = read_json(path = "../documents/dummy.json")

# 原有修改逻辑不变
json_list$Apples$Origin$Id = 1234
json_list$Oranges$Origin$Id = 4567
json_list$Oranges$Shipping$ShipperLabel = "Suntan Blue"

# 直接写入列表,可通过pretty参数控制输出格式
write_json(json_list, path = "../documents/dummy_new.json", pretty = TRUE)

写法2:手动序列化后用字符写入函数

如果你需要先得到序列化后的JSON字符串做额外校验,就使用普通字符写入函数writeLines,不要调用write_json:

json_list = read_json(path = "../documents/dummy.json")

# 原有修改逻辑不变
json_list$Apples$Origin$Id = 1234
json_list$Oranges$Origin$Id = 4567
json_list$Oranges$Shipping$ShipperLabel = "Suntan Blue"

json_modified <- toJSON(json_list, pretty = TRUE)
# 直接写入JSON字符串
writeLines(json_modified, con = "../documents/dummy_new.json")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:27:05