【问题标题】:Using jsonlite to write an unnamed list from R into a json array使用 jsonlite 将 R 中的未命名列表写入 json 数组
【发布时间】:2015-11-13 03:40:15
【问题描述】:

我正在向一位 C# 开发人员发送数据,该开发人员希望使用 http://json2csharp.com/ 将我的数据字符串转换为对象数组。我认为 jsonlite 包会对此有好处,但他没有得到他想要的结果,当我检查产生的输出时,它并不完全符合我的预期。我对这种情况的解释是

生成的输出
x <- list( 
  a=list( a=1,b='x',c=list("Foo","Bar"), d=as.Date("2015-01-01") ),
  b=list( a=2,b='y',c=list("Hello","World"), d=as.Date("2014-12-31") ),
  c=list( a=3,b='z',c=NULL, d=as.Date("2016-02-29") )
)
toJSON(x, pretty = FALSE )

曾经

{"a":{"a":[1],"b":["x"],"c":[["Foo"],["Bar"]],"d":["2015-01-01"]},"b":{"a":[2],"b":["y"],"c":[["Hello"],["World"]],"d":["2014-12-31"]},"c":{"a":[3],"b":["z"],"c":{},"d":["2016-02-29"]}} 

它将所有子元素数据放入列表中,同时将父命名列表视为命名元素的对象。 R 没有为 JSON 设计的那种类型,所以这可能是 toJSON 的预期行为,但我想要更像

[{"a":1,"b":"x","c":["Foo","Bar"],"d":"2015-01-01"},{"a":2,"b":"y","c":["Hello","World"],"d":"2014-12-31"},{"a":3,"b":"z","c":{},"d":"2016-02-29"}] 

如何将 R 中的列表写入 jsonlite 中的 JSON 数组?

【问题讨论】:

    标签: json r list jsonlite


    【解决方案1】:

    所以事实证明,取消命名列表并设置 auto_unbox 是我想要的。将代码更改为:

    x2 <- list( 
      list( a=1,b='x',c=list("Foo","Bar"), d=as.Date("2015-01-01") ),
      list( a=2,b='y',c=list("Hello","World"), d=as.Date("2014-12-31") ),
      list( a=3,b='z',c=NULL, d=as.Date("2016-02-29") )
    )
    toJSON(x2, auto_unbox = TRUE, pretty = FALSE )
    

    x2 <- unname(x)
    toJSON(x2, auto_unbox = TRUE, pretty = FALSE )
    

    产生了我正在寻找的对象数组:

    [{"a":1,"b":"x","c":["Foo","Bar"],"d":"2015-01-01"},{"a":2,"b":"y","c":["Hello","World"],"d":"2014-12-31"},{"a":3,"b":"z","c":{},"d":"2016-02-29"}] 
    

    不过,我无法命名它们。

    【讨论】:

    • 绝妙的答案!
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2016-05-18
    相关资源
    最近更新 更多