使用R删除json文件中元素的方法

rggaifut  于 2022-11-19  发布在  其他
关注(0)|答案(2)|浏览(159)

有没有一种方法可以使用R从JSON中删除元素?
下面是我正在使用的文件的示例:

[
    {
        "var1_id": 1,
        "var2_id": 2,
        "var3_id": 3
    },
    {
        "var1_id": 4,
        "var2_id": 5,
        "var3_id": 6
    },
    {
        "var1_id": 7,
        "var2_id": 8,
        "var3_id": 9
    }
]

我想使用R删除每个列表中var2_id所在的行,同时保留var1_id和var3_id。

ldioqlga

ldioqlga1#

最简单的方法是使用fromJSON转换为data.frame,删除列(select),然后使用toJSON转换为JSON

library(jsonlite)
library(dplyr)
fromJSON(str1) %>% 
   select(-var2_id) %>%
   toJSON(pretty = TRUE)
  • 输出
[
  {
    "var1_id": 1,
    "var3_id": 3
  },
  {
    "var1_id": 4,
    "var3_id": 6
  },
  {
    "var1_id": 7,
    "var3_id": 9
  }
]

数据

str1 <- '[
    {
        "var1_id": 1,
        "var2_id": 2,
        "var3_id": 3
    },
    {
        "var1_id": 4,
        "var2_id": 5,
        "var3_id": 6
    },
    {
        "var1_id": 7,
        "var2_id": 8,
        "var3_id": 9
    }
]'
wztqucjr

wztqucjr2#

如果需要,可以使用jsonStrings包来实现所需的功能,而无需传递给R对象。

library(jsonStrings)

str1 <- '[
    {
        "var1_id": 1,
        "var2_id": 2,
        "var3_id": 3
    },
    {
        "var1_id": 4,
        "var2_id": 5,
        "var3_id": 6
    },
    {
        "var1_id": 7,
        "var2_id": 8,
        "var3_id": 9
    }
]'

jstring <- jsonString$new(str1)

patch <- '[
  {"op": "remove", "path": "/0/var2_id"},
  {"op": "remove", "path": "/1/var2_id"},
  {"op": "remove", "path": "/2/var2_id"}
]'

jstring$patch(patch)$asString(pretty = TRUE) |> cat()
# [
#     {
#         "var1_id": 1,
#         "var3_id": 3
#     },
#     {
#         "var1_id": 4,
#         "var3_id": 6
#     },
#     {
#         "var1_id": 7,
#         "var3_id": 9
#     }
# ]

相关问题