r语言 - 从dataframe创建多级.json文件



我有一个数据框架,我想转换为。json文件。.json文件包含4个级别的信息,美化后应该是这样的:


{
"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文件,这些文件存储在一个新的数据框

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文件损坏;

jsTOT <- gsub("\[|\]", "", toJSON(dfTOT))
jsTOT <- gsub(pattern = ('\\'), replacement = '', x = jsTOT)

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

{"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包,但这不起作用。

如果有任何好的帮助,我将不胜感激。

不要提前转换为JSON。我建议你的dfTOT应该改为list:

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"}]} 

最新更新