我有以下数据结构 p1-24,每个都有 v1-v8。 缩写示例:
> p1
> --p1_v1.json
> --p1_v2.json
> --p1_v3.json
> --p1_v4.json
> p2
> --p2_v1.json
> --p2_v2.json
> --p2_v3.json
> --p2_v4.json
每个 json 文件都有几个元素,我需要为每个 json 文件添加一个额外的元素。
json原文:
> { “Element1”: info,
> “Element2”: info,
> “Element3”: [
> Info1
> Info2
> Info3]
> }
新元素:
> { “AdditionalElement: [
> 0.998
> 0.768
> 0.394
> 0.123]
> }
>
所以我想为所有的 json 文件结束这个
> “Element1”: info,
> “Element2”: info,
> “Element3”: [
> Info1
> Info2
> Info3],
> “AdditionalElement: [
> 0.998
> 0.768
> 0.394
> 0.123]
> }
我看过建议如何合并 json (jsonmerge) 文件,但一个接一个地获取,而不是组合 {} 中的所有元素。例如
>
> “Element1”: info,
> “Element2”: info,
> “Element3”: [
> Info1
> Info2
> Info3]
> },
> {
> “AdditionalElement: [
> 0.998
> 0.768
> 0.394
> 0.123]
> }
使用
fromJSON / cbind / toJSON
方法。
v <- c(.998, .768, .394, .123) ## element to add to all JSONs
library(jsonlite)
res <- lapply(json_lst, \(x, y) toJSON(cbind(fromJSON(x), add_element=y), pretty=TRUE), v)
res[[1]]
# [
# {
# "mpg": 21,
# "cyl": 6,
# "disp": 160,
# "hp": 110,
# "drat": 3.9,
# "wt": 2.62,
# "qsec": 16.46,
# "vs": 0,
# "am": 1,
# "gear": 4,
# "carb": 4,
# "add_element": 0.998,
# "_row": "Mazda RX4"
# },
# {
# "mpg": 21,
# "cyl": 6,
# "disp": 160,
# "hp": 110,
# "drat": 3.9,
# "wt": 2.875,
# "qsec": 17.02,
# "vs": 0,
# "am": 1,
# "gear": 4,
# "carb": 4,
# "add_element": 0.768,
# "_row": "Mazda RX4 Wag"
# },
# {
# "mpg": 22.8,
# "cyl": 4,
# "disp": 108,
# "hp": 93,
# "drat": 3.85,
# "wt": 2.32,
# "qsec": 18.61,
# "vs": 1,
# "am": 1,
# "gear": 4,
# "carb": 1,
# "add_element": 0.394,
# "_row": "Datsun 710"
# },
# {
# "mpg": 21.4,
# "cyl": 6,
# "disp": 258,
# "hp": 110,
# "drat": 3.08,
# "wt": 3.215,
# "qsec": 19.44,
# "vs": 1,
# "am": 0,
# "gear": 3,
# "carb": 1,
# "add_element": 0.123,
# "_row": "Hornet 4 Drive"
# }
# ]
注意: 要读取实际的 .json 文件(我使用下面的示例),请执行某项操作。喜欢:
path <- '/path/to/json/folder/'
files <- list.files(path)
json_lst <- lapply(files, fromJSON)
写回文件使用
Map(write_json, res, paste0(path, 'new_', files))
资料:
json_lst <- lapply(0:7*4, \(i) toJSON(mtcars[(1:4) + i, ], pretty=TRUE))