2016-08-01 89 views
-1

我有R中一個字符串,它逃脫引號:R中字符串的單反斜線更改爲有效的JSON字符串

my_text = {\"stim\":[\"platery\",\"denial\",\"generic\"]} 

當使用cat()我得到:

{"stim":["platery","denial","generic"]} 

現在我的整個字符串一個JSON字符串,需要解析並且被JSONLint評估爲無效。如果我複製&粘貼cat()版本,這是有效的JSON,所以我想我只是錯過了一些預處理。

我看到這個SO發佈hereand this oneand this really good one,所以我試圖取代雙引號單引號的JSON解析器:

gsub("\\\\", "\\\\\\\\", my_text, fixed=TRUE) 

但我以前不改變我的字符串作爲我通緝。我怎樣才能改變字符串成爲有效的JSON?

+1

您的原始字符串中沒有任何反斜槓,這就是爲什麼*它沒有更改我的字符串*。問題在別處。 –

回答

0

由於Wiktor說你的gsub沒有工作,因爲你試圖替換反斜槓,但是在你的字符串中沒有反斜槓。 R只是使用反斜槓來存儲雙引號。你鏈接的第三個SO帖子很好地解釋了R的字符串文字,它解決了這個問題。 R中的反斜槓存儲爲雙反斜槓。

我的第一條建議是使用R包jsonlite從R對象構建JSON,如果可能的話則使用字符串(heres the vignette)。

實施例:

myJSON <- jsonlite::toJSON(list(stim=c("platery","denial","generic"))) 
# {"stim":["platery","denial","generic"]} 

其次,(作爲第三SO後再次做說明的良好作業)複製/粘貼字符串的印刷方法可能不是驗證JSON的最佳方式。我不確定這個用例,但是用轉義字符存儲雙引號可能不是一件壞事。

如果你想獲得更漂亮的印刷方法,你可以在R中,使用大量的竅門(noquote()cat()print(quote=F)),但是這不會改變的R存儲雙引號反斜線:

此外,在一些構造JSON的情況是沒有必要的。我有一個使用plumbr包構建的API,它返回一個沒有任何修改的JSON列表(recJSON <- list(message=messages,recommendations=list(name=names, link=URLs))