【发布时间】:2014-12-17 21:28:37
【问题描述】:
一位同事给了我一个分隔文件。一列包含类似 JSON 的键/值对。我想将它们解析成列表。不幸的是,同事的 JSON 表示法似乎与 rjson 的期望不符。
jsonString <- "{person:[Santa],location:[NorthPole]}"
fromJSON(jsonString)
Error in fromJSON(jsonString) :
unexpected character "p"; expecting opening string quote (") for key value
所以我决定做一些正则表达式清理,将方括号转换为引号。我可以将 '[' 替换为 '"',但在同一操作中替换 '[' 和 ']' 时遇到问题:
gsub(pattern = "\\[", replacement = '"', x = jsonString)
[1] "{person:\"Santa],location:\"NorthPole]}"
字符类是可能的:
gsub(pattern = "[aeiou]", replacement = '"', x = jsonString)
[1] "{p\"rs\"n:[S\"nt\"],l\"c\"t\"\"n:[N\"rthP\"l\"]}"
但在这种情况下,没有检测到括号:
gsub(pattern = "[\\[\\]]", replacement = '"', x = jsonString)
[1] "{person:[Santa],location:[NorthPole]}"
我也愿意接受其他非正则表达式解决方案,用于将类似 JSON 的字符串解析为 R 数据对象。
【问题讨论】:
-
试试:
gsub(pattern = "\\[|]", replacement = '"', x = jsonString) -
您使用的是哪个
fromJSON?至少有三个包包含同名的函数 -
@nicola 好主意。这行得通,但是对于在类中包含两个以上的字符,我想我更喜欢使用 [] 表示法。
-
@RichardScriven: rjson
-
@MarkMiller 然后使用
gsub(pattern = "[]\\[]", replacement = '"', x = jsonString)