在 R 中处理 JSON 文件(JavaScript Object Notation)是非常常见的操作,尤其是在进行数据交换、API 调用以及保存和读取数据时。R 提供了多个包来处理 JSON 文件,最常用的包包括 jsonlite 和 rjson


🎯 一、读取 JSON 文件

1. jsonlite 包

jsonlite 包是 R 中最流行的处理 JSON 文件的工具,它支持将 JSON 数据转换为 R 对象(如数据框、列表等),并且支持将 R 对象转换为 JSON 格式。

安装并加载 jsonlite 包:

# 安装 jsonlite 包
install.packages("jsonlite")

# 加载 jsonlite 包
library(jsonlite)

读取 JSON 文件:

fromJSON() 函数用于将 JSON 文件转换为 R 对象。

# 读取 JSON 文件并转换为 R 对象
my_data <- fromJSON("path/to/your/file.json")

# 查看数据
head(my_data)

  • fromJSON() 将 JSON 文件读取并转换为相应的 R 数据结构(如数据框、列表等)。

读取 JSON 字符串:

如果你有 JSON 字符串而不是文件,可以直接使用 fromJSON() 进行转换。

# JSON 字符串
json_string <- '{"name": "Alice", "age": 25, "score": 95}'

# 转换为 R 对象
my_data <- fromJSON(json_string)

# 查看数据
my_data


2. rjson 包

rjson 包是另一个常用的 JSON 处理包,它提供了读取和写入 JSON 文件的功能,虽然 jsonlite 包比 rjson 更常用和功能更强大。

安装并加载 rjson 包:

# 安装 rjson 包
install.packages("rjson")

# 加载 rjson 包
library(rjson)

读取 JSON 文件:

使用 fromJSON() 函数读取 JSON 文件并转换为 R 对象。

# 读取 JSON 文件
my_data <- fromJSON(file = "path/to/your/file.json")

# 查看数据
my_data

  • fromJSON() 将 JSON 文件转换为 R 列表。与 jsonlite 包不同,rjson 读取的 JSON 数据通常被转换为 R 列表,而不是数据框。

✅ 二、写入 JSON 文件

1. 使用 jsonlite 写入 JSON 文件

jsonlite 包提供了 toJSON() 函数,可以将 R 对象(如数据框、列表等)转换为 JSON 格式并保存为文件。

写入 JSON 文件:

# 创建一个数据框
my_data <- data.frame(
  Name = c("Alice", "Bob", "Charlie"),
  Age = c(25, 30, 35),
  Score = c(95, 88, 92)
)

# 将数据框写入 JSON 文件
toJSON(my_data, pretty = TRUE)

# 保存 JSON 文件
write(toJSON(my_data, pretty = TRUE), "path/to/your/output.json")

  • pretty = TRUE 参数将生成格式化的(可读性更强的)JSON。
  • write() 用于将 JSON 字符串保存到文件。

2. 使用 rjson 写入 JSON 文件

rjson 包也提供了 toJSON() 函数,将 R 对象转换为 JSON 格式。

写入 JSON 文件:

# 创建一个数据框
my_data <- data.frame(
  Name = c("Alice", "Bob", "Charlie"),
  Age = c(25, 30, 35),
  Score = c(95, 88, 92)
)

# 将数据框转换为 JSON 字符串
json_string <- toJSON(my_data)

# 保存 JSON 字符串到文件
write(json_string, file = "path/to/your/output.json")

  • toJSON() 将 R 对象转换为 JSON 字符串。
  • write() 将 JSON 字符串写入文件。

✅ 三、常见的 JSON 操作

1. 嵌套 JSON 数据

JSON 文件常常包含嵌套的数据结构(如嵌套的列表或数据框)。在处理嵌套数据时,你可以递归地提取信息或使用 flatten 来展平嵌套结构。

使用 jsonlite 展平嵌套 JSON:

# 读取嵌套的 JSON 数据
nested_json <- '{"name": "Alice", "address": {"city": "New York", "zipcode": "10001"}}'

# 转换为 R 对象
nested_data <- fromJSON(nested_json)

# 展平嵌套数据
flattened_data <- flatten(nested_data)

# 查看展平后的数据
flattened_data

  • flatten() 函数可以将嵌套的 JSON 数据展平,转换为一个简单的数据框。

2. 提取特定字段

你可以使用基本的索引操作来提取 JSON 数据中的特定字段。

# 提取 "name" 字段
name <- nested_data$name

# 提取嵌套的 "city" 字段
city <- nested_data$address$city


🧪 四、小练习题

  1. 使用 jsonlite 包读取一个名为 data.json 的 JSON 文件,并查看文件的前几行数据。
  2. 创建一个包含多个嵌套信息(如姓名、地址、联系方式等)的 JSON 数据,并将其保存为 user_info.json 文件。
  3. 使用 jsonlite 包读取 JSON 数据并将其中的嵌套列表展平为数据框格式。

总结

操作示例
读取 JSON 文件 (jsonlite 包)my_data <- fromJSON("file.json")
读取 JSON 文件 (rjson 包)my_data <- fromJSON(file = "file.json")
写入 JSON 文件 (jsonlite 包)write(toJSON(my_data, pretty = TRUE), "output.json")
写入 JSON 文件 (rjson 包)write(toJSON(my_data), "output.json")
展平嵌套 JSON 数据flattened_data <- flatten(nested_data)

处理 JSON 文件在数据分析、API 调用和网络抓取中非常常见。通过使用 jsonlite 或 rjson 等包,R 提供了简单而强大的工具来处理 JSON 数据。如果你有任何问题,随时告诉我!😊