與@Jaap同意你的問題可以使用一些工作,以使其他用戶和那些幫助你更有幫助。無論如何,這是tidyjson
的一個經常性問題。查看我們希望很快提交給CRAN的更新文檔here。特別是關於this issue的討論可能會有所幫助。這是一個肯定需要改進的問題(以及spread_values
/等的詳細程度)(spread_all
是新版本中的一種替代方案,但目前它已被破壞了dplyr
> 0.7)
如果您想要要使用開發版的tidyjson
,試試devtools::install_github('jeremystan/tidyjson')
。無論如何,我認爲你提供的問題有一個可行的解決方案。你的JSON是無效的,所以我花了一些自由來清理它。 JSON結構
library(tidyjson)
library(dplyr)
raw_json <- "{\"ShipmentID\" : \"0031632569\", \"ShipmentType\" : \"Cross-border\", \"ShipmentStatus\" : \"Final\", \"PartyInfo\" : [{ \"Type\" : \"Consignee\", \"Code\" : \"0590000001\", \"Name\" : \"HP Inc. C/O XPOLogistics\", \"Address\": { \"AddressLine\" : [ \"4000 Technology Court\" ] }, \"City\" : { \"CityName\" : \"Sandston\", \"CityCode\" : [ { \"value\" : \"USSAX\", \"Qualifier\" : \"UN\" } ], \"State\" : \"VA\", \"CountryCode\" : \"US\", \"CountryName\" : \"United States\" }}]}"
prep <- raw_json %>%
spread_values(
ShipmentID = jstring(ShipmentID)
, ShipmentType = jstring(ShipmentType)
, ShipmentStatus = jstring(ShipmentStatus)) %>%
enter_object("PartyInfo") %>%
gather_array("PartyInfoID") %>%
spread_values(
Type = jstring(Type)
, Code = jstring(Code)
, Name = jstring(Name)
, CityName = jstring(City, CityName)
, CityState = jstring(City, State)
, CityCountryCode = jstring(City, CountryCode)
, CityCountryName = jstring(City, CountryName)
)
addressline <- prep %>%
enter_object(Address, AddressLine) %>%
gather_array("AddressLineID") %>%
append_values_string("AddressLine") %>%
select(document.id, AddressLineID, AddressLine)
citycode <- prep %>%
enter_object(City, CityCode) %>%
gather_array("CityCodeID") %>%
spread_values(
CityCode = jstring(value)
, CityCodeQualifier = jstring(Qualifier)) %>%
select(document.id, CityCodeID, CityCode, CityCodeQualifier)
prep %>%
left_join(addressline, by = "document.id") %>%
left_join(citycode, by = "document.id")
#> document.id ShipmentID ShipmentType ShipmentStatus PartyInfoID Type
#> 1 1 0031632569 Cross-border Final 1 Consignee
#> Code Name CityName CityState CityCountryCode
#> 1 0590000001 HP Inc. C/O XPOLogistics Sandston VA US
#> CityCountryName AddressLineID AddressLine CityCodeID CityCode
#> 1 United States 1 4000 Technology Court 1 USSAX
#> CityCodeQualifier
#> 1 UN
請閱讀[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)以及如何給[reprod可以示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610)。這會讓其他人更容易幫助你。 – Jaap