2017-07-17 3 views
0

OpenCPUとRを使用して、いくつかの入力を受け取り、データベースからtopoJSONファイルとその他の情報を返すWeb APIを作成しています。 OpenCPUは自動的にtoSSONを介して出力をプッシュし、結果としてJSONを引用したJSON出力(つまりtopoJSON)を生成します。これは明らかに理想的ではありません。特に、それはbackticked quotes(\ ")で信じられないほど厄介になるからです。fromJSONを使ってRオブジェクトに変換しようとしましたが、これを元に戻すことができます(これは非常に非効率です)。JSONでRのJSON文字列を引用しないようにするにはどうすればよいですか?

文字列をtoJSONという別の型のオブジェクトに変換して、それをちょうどそれに伝える別のハンドラを呼び出す方法があるように思えますそれだけを残して、私はそれを行う方法を見つけ出すことはできません。

ファイルのほんの始まりだ
> s <- '{"type":"Topology","objects":{"map": "0"}}' 
> fromJSON(s) 
$type 
[1] "Topology" 

$objects 
$objects$map 
[1] "0" 

> toJSON(fromJSON(s)) 
{"type":["Topology"],"objects":{"map":["0"]}} 

は(私が「0」で、実際のマップを置き換える)、そしてあなたが見ることができるように、ブラケットが登場"トポロジー" 「0」である。私はちょうどそれを文字列として続ければ、交互に、私はこの混乱で終わる:

> toJSON(s) 
["{\"type\":\"Topology\",\"objects\":{\"0000595ab81ec4f34__csv\": \"0\"}}"] 

は、私はちょうど引用符とバッククォートのないが、逐語的文字列を取得するようにこの問題を解決する方法はありますか?

EDIT:OpenCPUを使用しているため、出力はtoJSONから来る必要があります(残念なことに他の関数は使用できません)。後処理はできません。

答えて

1

ベクトルではなく値をほしいと思うようです。スカラー値に(jsonlite_1.5を使用して)私のためにエスケープせずに印刷ん

toJSON(fromJSON(s), auto_unbox = TRUE) 
# {"type":"Topology","objects":{"map":"0"}} 

を長さ1のベクトルを有効にするauto_unbox=TRUEを設定します。古いバージョンのjsonliteを使用している可能性があります。結果を印刷するには、cat()を使用して回避することもできます。あなたがそれをするときにスラッシュは表示されません。手動unbox関連するエントリができ

cat(toJSON(fromJSON(s), auto_unbox = TRUE)) 
+0

申し訳ありませんが明らかになっているはずですが、そのくらい(それは非常に便利だが)を使用します。基本的には、R関数を作成してWeb APIサービスとして使用できるということです。これはjsonliteを使用して自動的に変換するJSONを返します。いくつかの迷惑な制限があります。あなたが望む文字列を返すことはできません。文字列を返すだけでも問題はありません。最初と最後にマーカーを置くことができます。残念ながら、それはそのようには機能しません。 – Phil

+0

次に、問題をより明確に示すために質問を編集することをお勧めします。 – MrFlick

1

:それは思えないので、、何であるかOpenCPU

library(jsonlite) 
s <- '{"type":"Topology","objects":{"map": "0"}}' 
j <- fromJSON(s) 
j$type <- unbox(j$type) 
j$objects$map <- unbox(j$objects$map) 
toJSON(j) 
# {"type":"Topology","objects":{"map":"0"}} 
関連する問題