【发布时间】:2015-01-09 23:59:06
【问题描述】:
我正在努力实现以下目标。我的输入 JSON 看起来像这样,
{
"data":{
"shipping_address":[
{
"cust_id":"CUST-123",
"street":"123 Main St",
"city":"Atlanta",
"state":"GA",
"zip":"12345"
},
{
"cust_id":"CUST-456",
"street":"456 Front St",
"city":"Philadelphia",
"state":"PA",
"zip":"23456"
}
],
"orders":[
{
"cust_id":"CUST-456",
"items":[
{
"quantity":"2",
"item_code":"ABC-111-222",
"cust_id":"CUST-456"
},
{
"quantity":"1",
"item_code":"DEF-999-01-001",
"cust_id":"CUST-456"
}
]
},
{
"cust_id":"CUST-123",
"items":[
{
"quantity":"10",
"item_code":"998-111-222",
"cust_id":"CUST-123"
}
]
}
],
"payment":[
{
"cust_id":"CUST-123",
"type":"VISA",
"card_no":"1234-1111-2222-3333",
"expiry":"06/2016",
"billing_add_same_as_shipping":"Y",
"first_name":"John",
"last_name":"Smith"
},
{
"cust_id":"CUST-456",
"type":"VISA",
"card_no":"5678-4444-8877-5544",
"expiry":"08/2016",
"billing_add_same_as_shipping":"N",
"first_name":"Steve",
"last_name":"Jones"
}
],
"billing_address":[
{
"cust_id":"CUST-456",
"street":"7788 Back St",
"city":"Gainesville",
"state":"FL",
"zip":"33444"
}
]
}
}
我想将此 json 扁平化为两个单独的 json
{
"data":{
"shipping_address":{
"cust_id":"CUST-456",
"street":"456 Front St",
"city":"Philadelphia",
"state":"PA",
"zip":"23456"
},
"orders":{
"cust_id":"CUST-456",
"items":[
{
"quantity":"2",
"item_code":"ABC-111-222",
"cust_id":"CUST-456"
},
{
"quantity":"1",
"item_code":"DEF-999-01-001",
"cust_id":"CUST-456"
}
]
},
"payment":{
"cust_id":"CUST-456",
"type":"VISA",
"card_no":"5678-4444-8877-5544",
"expiry":"08/2016",
"billing_add_same_as_shipping":"N",
"first_name":"Steve",
"last_name":"Jones"
},
"billing_address":{
"cust_id":"CUST-456",
"street":"7788 Back St",
"city":"Gainesville",
"state":"FL",
"zip":"33444"
}
}
}
和
{
"data":{
"shipping_address":{
"cust_id":"CUST-123",
"street":"123 Main St",
"city":"Atlanta",
"state":"GA",
"zip":"12345"
},
"orders":{
"cust_id":"CUST-123",
"items":[
{
"quantity":"10",
"item_code":"998-111-222",
"cust_id":"CUST-123"
}
]
},
"payment":{
"cust_id":"CUST-123",
"type":"VISA",
"card_no":"1234-1111-2222-3333",
"expiry":"06/2016",
"billing_add_same_as_shipping":"Y",
"first_name":"John",
"last_name":"Smith"
}
}
}
在 Ruby 中是否有一种简单的方法来执行此操作,而无需对输入 json 的每个片段进行任何循环/解析(即通过执行任何 JSON 映射)?
【问题讨论】:
-
@DavidGrayson 我是 ruby 开发的新手。在我的 ruby 脚本中,我使用 JSON 模块来执行各种 JSON 操作。 JSON.parse(input_json_string) 正在返回一个哈希对象。我最初考虑循环遍历 json 中的每个段,并为每个 cust_id 找到匹配的相应 json 片段并创建一个新的 json。我不确定这样做是否是最佳的,并且想知道是否有任何 ruby 库/宝石可以用来实现这一点。