如何向多个json文件添加附加元素

问题描述 投票:0回答:1

我有以下数据结构 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]
> }
r json append
1个回答
0
投票

使用

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))
© www.soinside.com 2019 - 2024. All rights reserved.