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

