【问题标题】:Import csv with 1 json column导入带有 1 个 json 列的 csv
【发布时间】:2018-05-08 10:49:35
【问题描述】:

我一直在尝试导入一个 .csv 文件(逗号分隔),但是有一列 JSON 格式。这会在尝试一次性将数据作为数据框导入时出现问题。我一直在尝试 read.table 和 read.csv,但我找不到正确的解决方案(或堆栈上的类似问题)。

有没有一种简单的方法来加载数据框,并将 1 JSON 列描述为字符串列?例如"[{"..." : "..." , "...": "..."}]" 基本上 "[{ }]" 之间的所有内容都应该在最终数据框中的 1 列中结束。 这(对我来说)更具挑战性,因为“,”出现在 JSON 列中,不应将其视为拆分,但应用于拆分其余列。

期望的输出: df =

    V1 V2 V3 JSONCOLUMN
    x  y  z  "[{"..." : "..." , "...": "..."}]"

【问题讨论】:

  • 你能从你的 csv 文件中发布一些最小的样本数据吗?
  • firstRow = c("Date", "Time Number", "Fun","JSON_COLUMN") secondRow = c("2-2-1900", "14:09:56", 4 , TRUE, "[{"message":"nothing","description": 'hello", "otherField": "ciao"}])") 类似的东西是 csv 文件的样子,但是我无法复制它完全在 R 中,因为这种写下来的方式并不完全有效,因为 " 字符

标签: r csv


【解决方案1】:

这是一个有点老套的方法:

# Read csv
df <- read.csv(text =
    '"Date", "Time", "Number", "Fun", "JSON_COLUMN"
    "2-2-1900", "14:09:56", 4, TRUE, "[{"message":"nothing","description": "hello", "otherField": "ciao"}])"');

# Add double quotes for keys and values
df$JSON_COLUMN <- gsub("(\\w+):(\\s*)(\\w+)", "\"\\1\":\\2\"\\3\"", df$JSON_COLUMN)
df;
#Date      Time Number   Fun
#1     2-2-1900  14:09:56      4  TRUE
#                                                   JSON_COLUMN
#1  [{"message":"nothing","description": "hello", "otherField": "ciao"}])

说明:由于read.csv 会从 JSON 字符串中去除双引号,因此我们使用正则表达式将它们添加回来。

【讨论】:

    猜你喜欢
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    相关资源
    最近更新 更多