読者です 読者をやめる 読者になる 読者になる

jsonliteで要素ひとつだけのベクトルをうまくtoJSON()するにはauto_unboxを使えばいい

R JSON

おさらい

jsonliteはすてきですが、要素ひとつのベクトルもリストとして変換してしまいます。

toJSON(list(a=1))
# {"a":[1]}

これを避けるにはunbox()を使います。

toJSON(list(a=unbox(1)))
# {"a":1}

が、unbox()をいちいち手動でやるのは無駄な努力だと判明しました...

懺悔

前に、ネストしたリストにはrapply使えばいいだのごちゃごちゃ書きましたが、

jsonliteで要素ひとつだけのベクトルをうまくtoJSON()する - Technically, technophobic.

toJSON()auto_unboxというオプションを使えば自動的にいい感じにやってくれるらしいです。

a <- list( a = 1, b = c(1, 2, 3), c = list( x = 1, y = c(2, 3) ) )
toJSON(a, auto_unbox = TRUE)
# {"a":1,"b":[1,2,3],"c":{"x":1,"y":[2,3]}} 

Issue立てたら教えてもらいました。お恥ずかしい。適当なこと言ってすみませんでした。。

unbox() recursively · Issue #39 · jeroenooms/jsonlite · GitHub