如何在R列中读取JSON字符串的一个值?

时间:2019-01-30 11:55:13

标签: r json

我在R中有一个由6列组成的数据框。其中两个是JSON。我只需要一小部分JSON字符串即可显示在最终数据框中。

其中JSON列之一称为“问题”,其中包含询问用户的问题。另一个JSON列称为“ answer_options”,其中包含您猜出来的answer选项。但是,在此特定子集中,始终只有一个答案选项。这是数据框的前两列:

item_number  question  answer_options  correct_answer
1  {"jsonTypeDefinition":"gameSelector","type":"OpenAnswer","question":{"mediaType":"text","content":"0 x 1"}}  {"layout":"Numpad","mediaType":"textAnswerOptions","answerOptions":["0"]}  0
2  {"jsonTypeDefinition":"gameSelector","type":"OpenAnswer","question":{"mediaType":"text","content":"1 x 1"}}  {"layout":"Numpad","mediaType":"textAnswerOptions","answerOptions":["1"]}  0

(很抱歉,此处的列名格式错误,我做了很多尝试,但无法使其更简洁。您可以在下表中看到我尝试制作的内容)

这就是我想要的样子:

item_number  question  answer_options  correct_answer
1            "0 x 1"   "0"             0
2            "1 x 1"   "1"             0

1 个答案:

答案 0 :(得分:1)

假设

question = '{"jsonTypeDefinition":"gameSelector","type":"OpenAnswer","question":{"mediaType":"text","content":"0 x 1"}}' 

我们可以使用软件包jsonlite来完成

jsonlite::fromJSON(question)$question$content
# returns
# [1] "0 x 1"

然后,您可以将其复制到数据框的整个列question,例如

# dt denotes the data frame
vapply(1:nrow(dt), 
       function (k) jsonlite::fromJSON(dt$question[k])$question$content, 
       character(1))

然后类似地输入列answer_options