3

R 変数を JSON に変換するヘルパー関数を作成しています。この問題に遭遇しました。値を JSON 配列として表現したいのですが、これは RJSONIO ドキュメントに従って AsIs クラスを使用して行うことができます。

x = "HELLO"
toJSON(list(x = I(x)), collapse="")

"{ \"x\": [ \"HELLO\" ] }"

しかし、リストがあるとしましょう

y = list(a = "HELLO", b = "WORLD")
toJSON(list(y = I(y)), collapse="")

"{ \"y\": {\n \"a\": \"HELLO\",\n\"b\": \"WORLD\" \n} }"

y -> a で見つかった値は、配列として表されません。理想的には

"{ \"y\": [{\n \"a\": \"HELLO\",\n\"b\": \"WORLD\" \n}] }"

角かっこに注意してください。また、すべての「\n」を取り除きたいのですが、折りたたんでもネストされた JSON の改行がなくなりません。何か案は?

4

1 に答える 1

2

として書いてみてください

y = list(list(a = "HELLO", b = "WORLD"))
test<-toJSON(list(y = I(y)), collapse="")

ファイルに書き込むと、次のように表示されます。

{ "y": [
 {
 "a": "HELLO",
"b": "WORLD" 
} 
] }

\n を次のように削除できると思います

test<-gsub("\n","",test)

またはRJSONパッケージを使用

> rjson::toJSON(list(y = I(y)))
[1] "{\"y\":[{\"a\":\"HELLO\",\"b\":\"WORLD\"}]}"

理由

> names(list(a = "HELLO", b = "WORLD"))
[1] "a" "b"
> names(list(list(a = "HELLO", b = "WORLD")))
NULL

rjson::toJSON を調べると、このコード スニペットが見つかります

  if (!is.null(names(x))) 
            return(toJSON(as.list(x)))
        str = "["

そのため、JSON 配列として扱うには名前のないリストが必要なようです。たぶんRJSONIOも似ています。

于 2012-07-10T23:44:38.763 に答える