R列表/数据帧到JSON对象数组

问题描述 投票:1回答:1

我正在尝试在R中使用jsonlite创建对象的JSON数组。目标是这样的JSON:

{
  "top":[
    {
      "master1": {
      "item1": "value1"
      }
    },
    {
      "master2": {
      "item2": "value2"
      }
    }
  ]
}

我尝试了带有列表列的列表列表和数据框,但是无法获得所需的输出。除此之外,将上述内容与fromJSON / toJSON转换为其他格式:

library(jsonlite)
txt <- '{
  "top":[
    {
      "master1": {
      "item1": "value1"
      }
    },
    {
      "master2": {
      "item2": "value2"
      }
    }]
}'

toJSON(fromJSON(txt), pretty = T)

# Output
{
  "top": [
    {
      "master1": {
        "item1": "value1"
      },
      "master2": {}
    },
    {
      "master1": {},
      "master2": {
        "item2": "value2"
      }
    }
  ]
}

我需要为此设置一个参数吗?

r json jsonlite
1个回答
0
投票

默认情况下,fromJSON调用将您的输入转换为数据帧,并因此添加NA值,从而导致输出JSON中的条目为空:

$top
   item1  item2
1 value1   <NA>
2   <NA> value2

您需要将simplifyDataFrame = FALSE添加到fromJSON调用中,以防止其创建数据帧。

toJSON(fromJSON(txt, simplifyDataFrame = FALSE), pretty = T)

给予

{
  "top": [
    {
      "master1": {
        "item1": ["value1"]
      }
    },
    {
      "master2": {
        "item2": ["value2"]
      }
    }
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.