R语言使用toJSON函数处理列表数组匹配预设API格式问题
问题原因
- 第一个问题:R中长度为1的数值向量默认会被
jsonlite的toJSON函数序列化为JSON数组,所以total字段外层多了一对[] - 第二个问题:你当前输出的字段名
perPlan和API要求的perItem不匹配,需要先修正列表内的字段名 - 之前将列表转数组的操作无法解决问题,因为问题根源是内部单个字段的序列化规则,和外层列表结构无关
解决方案
方案1:使用auto_unbox参数(最简便)
转换时添加auto_unbox = TRUE参数,该参数会自动将所有长度为1的R向量识别为JSON标量,不会额外套数组,同时手动匹配API要求的外层结构:
library(jsonlite) # 第一步:先修正字段名,确保和API要求的perItem一致 names(Export[[1]]) <- c("total", "perItem") # 第二步:构造完整结构并执行JSON转换 target_json <- toJSON( list( myTable = list( split = Export ) ), auto_unbox = TRUE )
方案2:对单个字段使用unbox()标记
如果只需要特定字段转为标量,不想全局开启自动拆箱,可以单独对total字段做标记:
library(jsonlite) # 修正字段名 names(Export[[1]]) <- c("total", "perItem") # 单独标记total为标量类型 Export[[1]]$total <- unbox(Export[[1]]$total) # 转换JSON target_json <- toJSON( list( myTable = list( split = Export ) ) )
输出验证
执行上述代码后得到的JSON结构完全匹配API要求:
{"myTable":{"split":[{"total":13,"perItem":[5,7,0]}]}}
内容的提问来源于stack exchange,提问作者Nneka
相关产品推荐
相关产品推荐

