【问题标题】:R jsonlite tojson producing .1 on duplicate key namesR jsonlite tojson 在重复的键名上产生 .1
【发布时间】:2020-11-29 20:39:47
【问题描述】:

我有以下 R 结构

list(Message = list(MessageType = "WARNING", MessageSubType = "USERNAME", 
    MessageID = "105"), Message = list(MessageType = "WARNING", 
    MessageSubType = "PASSWORD", MessageID = "106"))

我想用jsonlite::toJSON(auto_unbox = T)把它转换成这个

{"Message":{"MessageType":"WARNING","MessageSubType":"USERNAME","MessageID":"105"},"Message_1":{"MessageType":"WARNING","MessageSubType":"PASSWORD","MessageID":"106"}}

但是,jsonlite 会使用“Message.1”而不是“Message_1”递增。

踢球者:这可能是多个结构,所以我需要一些可以重复的东西,而不管键名如何。不确定jsonlite::toJSON() 是否可以接受一个参数来告诉它的行为类似于上面所需的输出。非常感谢任何帮助!

【问题讨论】:

    标签: r jsonlite


    【解决方案1】:

    如果我们需要更改默认选项.1.2 等的重复名称,请使用

    names(lst1) <- make.unique(names(lst1), sep="_")
    

    现在,申请toJSON

    jsonlite::toJSON(lst1, auto_unbox = TRUE)
    #{"Message":{"MessageType":"WARNING","MessageSubType":"USERNAME","MessageID":"105"},"Message_1":{"MessageType":"WARNING","MessageSubType":"PASSWORD","MessageID":"106"}} 
    

    本质上,当它调用data.frame时,重复的名称被更改为make.unique,默认选项是sep="."

    make.unique(names, sep = ".")

    数据

    lst1 <- list(Message = list(MessageType = "WARNING", MessageSubType = "USERNAME", 
        MessageID = "105"), Message = list(MessageType = "WARNING", 
        MessageSubType = "PASSWORD", MessageID = "106"))
    

    【讨论】:

    • 这看起来不错。我正在尝试查看 jsonlite 是否允许可选参数传递给它对 make.unique 的使用。取而代之的是,我将 fork 并修改为我自己的用途,然后 PR 回到主项目。
    • 我为此开了一个 PR。 github.com/jeroen/jsonlite/pull/340
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2013-03-10
    • 2021-12-17
    • 2018-02-22
    相关资源
    最近更新 更多