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

使用R包jsonlite写入JSON文件时如何保留原文件原有格式

问题定位

jsonlite读写JSON时出现结构改动是默认的自动简化参数导致的:

  • 读取时fromJSON默认开启simplifyVector = TRUE,会将JSON中长度为1的数组自动转换为R的标量/原子向量,丢失原数组的包裹属性
  • 写入时write_json底层调用的toJSON默认auto_unbox = FALSE,R中长度为1的向量会被序列化为单元素数组,和原JSON的结构不匹配

两类参数的共同作用会导致原JSON的单值和单元素数组结构错位,不符合第三方应用的结构校验规则。

解决方案

方案一:全链路保留原JSON结构(最稳妥,无结构改动)

读取时关闭自动简化,写入时保留列表原生结构即可1:1还原原文件:

library(jsonlite)

# 读取时关闭自动简化,所有JSON数组都会保留为R的列表结构
json_lst <- fromJSON(
  txt = "待读取的JSON文件路径",
  simplifyVector = FALSE
)

# 写入时完全匹配读取到的结构
write_json(
  json_lst, 
  "./test/test_2.json",
  auto_unbox = FALSE,
  pretty = TRUE # 按需开启,和原文件的格式化规则对齐
)

方案二:适配简化后的数据操作需求

如果需要在R中使用简化后的向量结构做数据处理,可以在写入时开启自动拆箱,适配原JSON的标量结构:

library(jsonlite)

json_lst <- fromJSON(txt = "待读取的JSON文件路径")

# 写入时自动将R中长度为1的向量转成JSON标量,和原文件结构对齐
write_json(
  json_lst, 
  "./test/test_2.json",
  auto_unbox = TRUE
)

内容的提问来源于stack exchange,提问作者Valentin_Ștefan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:15:03