Regex 替换特殊字符以使JSON API输出有效

Regex 替换特殊字符以使JSON API输出有效,regex,json,r,twitter,Regex,Json,R,Twitter,我正在使用TwitterRESTAPI1.1(user_timeline.json)编写我的R脚本。我收集了大量的推特 不幸的是,文本包含许多特殊字符,如\n、^或单个\。到目前为止,我能够在通过JSON的导入它们之前用str_replace_all或gsub替换它们(jsonlite包): 包含问题字符的tweet是AFAICS: [{\"created_at\":\"Fri Feb 07 18:35:02 +0000 2014\",\"id\":431858659656990721,\"id

我正在使用TwitterRESTAPI1.1(user_timeline.json)编写我的R脚本。我收集了大量的推特

不幸的是,文本包含许多特殊字符,如
\n
^
或单个
\
。到目前为止,我能够在通过JSON的
导入它们之前用str_replace_all或gsub替换它们(jsonlite包):

包含问题字符的tweet是AFAICS:

[{\"created_at\":\"Fri Feb 07 18:35:02 +0000 2014\",\"id\":431858659656990721,\"id_str\":\"431858659656990721\",\"text\":\"RT @FHubersr: @peteraltmaier //die Schwarz-Grünen werden zeigen, daß sich Ökologie und Ökonomie vertragen und kein Widerspruch sind.Mutig v…\",\"source\":\"<a href=\\\"http://twitter.com/download/iphone\\\" rel=\\\"nofollow\\\">Twitter for iPhone</a>\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":378693834,\"id_str\":\"378693834\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Fri Feb 07 18:32:30 +0000 2014\",\"id\":431858022366064640,\"id_str\":\"431858022366064640\",\"text\":\"@peteraltmaier //die Schwarz-Grünen werden zeigen, daß sich Ökologie und Ökonomie vertragen und kein Widerspruch sind.Mutig von bd. Seiten\xed\xa0\xbd\xed\xb1\x8d\xed\xa0\xbd\xed\xb8\x8e\",\"source\":\"<a href=\\\"http://twitter.com/download/iphone\\\" rel=\\\"nofollow\\\">Twitter for iPhone</a>\",\"truncated\":false,\"in_reply_to_status_id\":431845492579123201,\"in_reply_to_status_id_str\":\"431845492579123201\",\"in_reply_to_user_id\":378693834,\"in_reply_to_user_id_str\":\"378693834\",\"in_reply_to_screen_name\":\"peteraltmaier\",\"user\":{\"id\":2172292811,\"id_str\":\"2172292811\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweet_count\":3,\"favorite_count\":4,\"favorited\":false,\"retweeted\":false,\"lang\":\"de\"},\"retweet_count\":3,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"de\"}]
[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\@fhubersrr:@peteraltmier//die Schwarz Gr nen werden zeigen,daßkologie und kologie und konomie vertragen und kein Widerspruch sind.mutich v.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\“在回答回答回答回答回答回答回答回答用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户用户id str:零:::零,,“在回答回答回答用户用户身份状态状态状态状态下身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份方面身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份身份。。。。。。。。。。。。。。。。。。。。。在回答回答回答回答回答回答用户身份身份身份。状态。状态。状态。状态。状态。状态。状态。状态。身份。状态。状态。状态。状态。状态。状态。状态。状态。状态。状态。状态。状态。身份。身份。状态。状态。身份。状态。状态。状态。身份。状态。身份。状态。状态。状态。身份。身份。身份。状态。身份。身份。屏幕2014年\“,\”id\“:431858022366064640,\“id\u str\”:“431858022366064640\”,“text\”:“@peteraltmaier//die Schwarz Grünen werden zeigen,daßsichÖkologie undÖkonomie vertragen und kein Widerspruch sind.Mutig von bd.Seiten\xed\xa0\xbd\xb1\x8d\xed\xed\xed\xed\xed\xa0\xbd\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xed\xe8\xe\“在答复用户用户用户用户身份id”方面:378693834,,\“在答复用户用户用户用户身份id”方面:378693834,,\“在答复用户用户用户用户身份身份身份身份身份身份身份身份身份身份身份身份身份身份证方面,你们们在回答用户用户用户用户用户身份身份身份身份身份身份证方面,str \”中:“::::“378686938383834\,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“用户用户用户:,,,,,,,,,,,,,,,,,,,,,,,“最爱的”计数“:4”favorited\“:false,\“retweeted\”:false,\“lang\”:“de\”,“retweet\u count\”:3,\“favorite\u count\”:0,\“favorited\”:false,\“retweeted\”:false,\“lang\”:“de\”]
我已经尝试了很多东西,但即使在阅读了这里的一些线程之后,我仍然无法找到一个解决方案来替换所有有问题的特殊字符

注意:非常有趣的是,当我想通过fromJSON导入单个tweet时,我没有收到错误。但是,一旦导入correctJSON字符串,它就会抛出错误。但是我需要correctJSON,因为它有许多外观

PS:我只粘贴了有问题的tweet。在这里你可以看到我的API调用的整个输出也包含以下内容:


谢谢你的帮助!

好的,我自己找到了一个可能的答案,它适用于我迄今收集的前5000条推文:

correctJSON <- function(string) {
  string <- str_replace_all(string, pattern = "[^[:print:]]", replacement = " ")
  string <- str_replace_all(string, pattern = perl('\\\\(?![tn"])'), replacement = " ")
  return(string)
}

correctJSON这些字符是作为
\xed\xa0
输出的吗?是的,它们是。为了澄清这一点,我上传了带有相关条目的RData文件。
current
包含我的Twitter API调用的直接输出(>100条tweets):额外信息:我正在使用Debian Sid amd64上最新的RStudio。
[{\"created_at\":\"Fri Feb 07 18:35:02 +0000 2014\",\"id\":431858659656990721,\"id_str\":\"431858659656990721\",\"text\":\"RT @FHubersr: @peteraltmaier //die Schwarz-Grünen werden zeigen, daß sich Ökologie und Ökonomie vertragen und kein Widerspruch sind.Mutig v…\",\"source\":\"<a href=\\\"http://twitter.com/download/iphone\\\" rel=\\\"nofollow\\\">Twitter for iPhone</a>\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":378693834,\"id_str\":\"378693834\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Fri Feb 07 18:32:30 +0000 2014\",\"id\":431858022366064640,\"id_str\":\"431858022366064640\",\"text\":\"@peteraltmaier //die Schwarz-Grünen werden zeigen, daß sich Ökologie und Ökonomie vertragen und kein Widerspruch sind.Mutig von bd. Seiten\xed\xa0\xbd\xed\xb1\x8d\xed\xa0\xbd\xed\xb8\x8e\",\"source\":\"<a href=\\\"http://twitter.com/download/iphone\\\" rel=\\\"nofollow\\\">Twitter for iPhone</a>\",\"truncated\":false,\"in_reply_to_status_id\":431845492579123201,\"in_reply_to_status_id_str\":\"431845492579123201\",\"in_reply_to_user_id\":378693834,\"in_reply_to_user_id_str\":\"378693834\",\"in_reply_to_screen_name\":\"peteraltmaier\",\"user\":{\"id\":2172292811,\"id_str\":\"2172292811\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweet_count\":3,\"favorite_count\":4,\"favorited\":false,\"retweeted\":false,\"lang\":\"de\"},\"retweet_count\":3,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"de\"}]
correctJSON <- function(string) {
  string <- str_replace_all(string, pattern = "[^[:print:]]", replacement = " ")
  string <- str_replace_all(string, pattern = perl('\\\\(?![tn"])'), replacement = " ")
  return(string)
}