0

一般に、複数の列を折りたたんで JSON オブジェクトを作成する必要があると感じています。これを行う直接的な方法はありません。ありましたらご指摘ください..

私はこれのデータを持っています

A B C
1 a x
1 a y
1 c z
2 d p
2 f q
2 f r

次のようなjsonを作成するにはどうすればよいですか

{'query':'1', 'type':[{'name':'a', 'values':[{'value':'x'}, {'value':'y'}]}, {'name':'c', 'values':[{'value':'z'}]}]}

'query':'2' についても同様

私はそれらをmongoのインポート/エクスポートの個々のjson行形式で吐き出そうとしています。任意のポインタも高く評価されています..

4

1 に答える 1

1

ここでわかるように、「値」の2つのキーで少し「非標準」のことが起こっています(これが合法的なjsonかどうかはわかりません):

(js <- jsonlite::fromJSON('{"query":"1", "type":[{"name":"a", "values":[{"value":"x"}, {"value":"y"}]}, {"name":"c", "values":[{"value":"z"}]}]}'))
## $query
## [1] "1"
## 
## $type
##   name values
## 1    a   x, y
## 2    c      z

... data.frames のリストを含む data.frame セルを使用:

js$type$values[[1]]
##   value
## 1     x
## 2     y
class(js$type$values[[1]])
## [1] "data.frame"

名前付きリストの代わりにベクトルを含む「タイプ」変数を受け入れることができる場合は、おそらく次のコードで十分です。

jsonlite::toJSON(lapply(unique(dat[, 'A']), function(a1) {
    list(query = a1, 
         type = lapply(unique(dat[dat$A == a1, 'B']),  function(b2) {
             list(name = b2,
                  values = dat[(dat$A == a1) & (dat$B == b2), 'C'])
         }))
}))
## [{"query":[1],"type":[{"name":["a"],"values":["x","y"]},{"name":["c"],"values":["z"]}]},{"query":[2],"type":[{"name":["d"],"values":["p"]},{"name":["f"],"values":["q","r"]}]}] 
于 2014-11-18T08:08:10.373 に答える