2016-08-01 12 views
-1

Ich habe eine Zeichenfolge in R, die Anführungszeichen entkommt:auf gültige JSON-String

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

Wenn cat() ich mit bekommen:

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

Jetzt ist meine ganze Zeichenfolge eine JSON-Zeichenfolge, die geparst werden muss und von JSONLint als ungültig bewertet wird. Wenn ich & die cat() Version kopiere, ist dies ein JSON gültig, also denke ich, dass ich hier einige Vorverarbeitungen vermisse.

sah ich die SO here posten, and this one, and this really good one, also habe ich versucht, die einfachen Anführungszeichen mit doppelten Anführungszeichen für den JSON-Parser zu ersetzen:

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

aber es did't meine Zeichenfolge ändern, wie ich gewollt. Wie kann ich die Zeichenfolge ändern, um ein gültiger JSON zu werden?

+1

Sie haben keine umgekehrten Schrägstriche in Ihrer ursprünglichen Zeichenfolge, deshalb * es änderte meine Zeichenfolge * nicht. Das Problem ist woanders. –

Antwort

0

Wie Wiktor sagte Ihre gsub funktionierte nicht, weil Sie versuchen, Backslashes zu ersetzen, aber es gibt keine Backslashes in Ihrer Zeichenfolge. R verwendet nur die umgekehrten Schrägstriche, um die Anführungszeichen zu speichern. Der dritte SO-Post, den Sie verlinken, macht einen guten Job, indem er die Zeichenfolgenliterale von R erklärt, die sich damit befassen. Ein Backslash in R wird als doppelter Backslash gespeichert.

Mein erster Ratschlag wäre, das R-Paket jsonlite zu verwenden, um Ihre JSON von einem R-Objekt im Gegensatz zu einem String zu konstruieren, wenn möglich (heres the vignette).

Beispiel:

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

Zweitens (wie die dritten SO wieder Post macht einen guten Job zu erklären) Kopieren/Einfügen der Druckmethode der Zeichenfolge nicht der beste Weg sein, um die JSON zu validieren. Ich bin mir des Anwendungsfalls nicht sicher, aber R, das doppelte Anführungszeichen mit Escape-Zeichen speichert, ist wahrscheinlich keine schlechte Sache.

Wenn Sie ein schöneres Druckverfahren erhalten Sie zahlreiche Tricks in R (noquote(), cat(), print(quote=F)), aber das wird mich nicht ändern, dass R speichert die doppelten Anführungszeichen mit umgekehrten Schrägstrichen verwenden können:

Zusätzlich kann in einigen Fälle, in denen der JSON erstellt wird, sind nicht erforderlich. Ich habe eine API gebaut mit dem plumbr Paket, das eine Liste als JSON ohne irgendwelche Änderungen zurückgibt (recJSON <- list(message=messages,recommendations=list(name=names, link=URLs)))