首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数据帧创建多级.json文件

从数据帧创建多级.json文件
EN

Stack Overflow用户
提问于 2021-10-26 10:31:43
回答 1查看 24关注 0票数 0

我有一个数据帧,我想将其转换为.json文件。.json文件有4层包含信息,美化后的文件应该是这样的:

代码语言:javascript
复制
 {
    "message": {
        "message_reference": "Something",
        "message_receiver": "Something",
        "client_name": "Something",
        "debtor_name": "Something",
        "booking_reference": "B123456",
        "invoice_reference": "I123456",
        "transport_direction": "E"
    },
    "container": {
        "shippingcompany_name": "billy",
        "container_isotype": "40DV"
    },
    "inland": {
        "destination_name": "companyB",
        "loading_discharge": "L"
    },
    "delivery": {
        "terminal_code": "123",
        "terminal_name": "123RTM"
    }
}

我将包含所有信息的原始数据帧拆分为4个独立的数据帧,并制作了4个.json文件,将其存储在新的数据帧中

代码语言:javascript
复制
dfTEST <- data.frame("message_reference" = character(1),
                     "message_reciever" = character(1),
                     "client_name" = character(1),
                     "debtor_name" = character(1),
                     "booking_reference" = character(1),
                     "invoice_reference"  = character(1),
                     "transport_direction" = character(1),
                     "shipingcompany_name" = character(1),
                     "container_isotype" = character(1),
                     "destination_name" = character(1),
                     "loading_dishcarge" = character(1),
                     "terminal_code" = character(1),
                     "terminal_name" = character(1))


dfTEST$message_reference <- "Something"
dfTEST$message_reciever <- "Something"
dfTEST$client_name <- "Something"
dfTEST$debtor_name <- "Something"
dfTEST$booking_reference <- "B123456"
dfTEST$invoice_reference <- "I123456"
dfTEST$transport_direction <- "E"
dfTEST$shipingcompany_name <- "billy"
dfTEST$container_isotype <- "40DV"
dfTEST$destination_name <- "Company B"
dfTEST$loading_dishcarge <- "L"
dfTEST$terminal_code <- "123"
dfTEST$terminal_name <- "123RTM"

dfMESSAGE <- dfTEST[c(1,2,3,4,5,6,7)]
dfCONTAINER <- dfTEST[c(8,9)]
dfINLAND <- dfTEST[c(10,11)]
dfDEL <- dfTEST[c(12,13)]

jsMESSAGE <- gsub("\\[|\\]", "", toJSON(dfMESSAGE))
jsCONTAINER <- gsub("\\[|\\]", "", toJSON(dfCONTAINER))
jsINLAND <- gsub("\\[|\\]", "", toJSON(dfINLAND))
jsDEL <- gsub("\\[|\\]", "", toJSON(dfDEL))


dfTOT <- data.frame(message = character(1),
                    container = character(1),
                    inland = character(1),
                    delivery = character(1))

dfTOT$message <- jsMESSAGE
dfTOT$container <- jsCONTAINER
dfTOT$inland <- jsINLAND
dfTOT$delivery <- jsDEL

当我将新的数据帧转换成json文件时,它看起来几乎一样,但单独的json文件在它们周围有引号,这使得最终的json文件损坏;

代码语言:javascript
复制
jsTOT <- gsub("\\[|\\]", "", toJSON(dfTOT))
jsTOT <- gsub(pattern = ('\\\\'), replacement = '', x = jsTOT)

生成的jsTOT看起来像第一行,而它应该像第二行;

代码语言:javascript
复制
{"message":"{"message_reference":"MESSAGEREFERENCE123","message_reciever":"VanBerkelLogistics","client_name":"Modality Software solutions","debtor_name":"Modality Software solutions"}","container":"{"booking_reference":"B123456","invoice_reference":"I123456"}","inland":"{"transport_direction":"E","shipingcompany_name":"MAERSK"}","delivery":"{"container_isotype":"40DV","destination_name":"Friesland Campina Nutrifeed"}"}

{"message":{"message_reference":"MESSAGEREFERENCE123","message_reciever":"VanBerkelLogistics","client_name":"Modality Software solutions","debtor_name":"Modality Software solutions"},"container":{"booking_reference":"B123456","invoice_reference":"I123456"},"inland":{"transport_direction":"E","shipingcompany_name":"MAERSK"},"delivery":{"container_isotype":"40DV","destination_name":"Friesland Campina Nutrifeed"}}

因此,基本上我的问题是:如何删除.json文件中的引号?也许我应该以其他方式构建它,但我不知道如何做到这一点。我使用jsonlite包,我也尝试过rjson包,但这不起作用。任何在好的方向上的帮助都将受到高度的感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-26 10:49:58

不要提早转换为JSON。我建议你的dfTOT应该是一个list

代码语言:javascript
复制
newTOT <- list(message = dfMESSAGE,
                    container = dfCONTAINER,
                    inland = dfINLAND,
                    delivery = dfDEL)
toJSON(newTOT)
# {"message":[{"message_reference":"Something","message_reciever":"Something","client_name":"Something","debtor_name":"Something","booking_reference":"B123456","invoice_reference":"I123456","transport_direction":"E"}],"container":[{"shipingcompany_name":"billy","container_isotype":"40DV"}],"inland":[{"destination_name":"Company B","loading_dishcarge":"L"}],"delivery":[{"terminal_code":"123","terminal_name":"123RTM"}]} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69721483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档