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

おさらい

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