2017-09-04 6 views
0

Ich habe ein Array von Hash wie hier gezeigt. Ich möchte die Werte einiger Felder mit benutzerdefinierten Trennzeichen zusammenführen. Hier zeige ich nur zwei Hashes im Array, es ist möglich, mehr zu haben. Aber sie sind immer in der gleichen Reihenfolge wie hier gezeigt.Zusammenführen von Hash-Array mit demselben Schlüssel

{ 
"details": [ 
{ 
    "place": "abc", 
    "group": 3, 
    "year": 2006, 
    "id": 1304, 
    "street": "xyz 14", 
    "lf_number": "0118", 
    "code": 4433, 
    "name": "abc coorperation", 
    "group2": 3817, 
    "group1": 32, 
    "postal_code": "22926", 
    "status": 2 
}, 
{ 
    "place": "cbc", 
    "group": 2, 
    "year": 2007, 
    "id": 4983, 
    "street": "mnc 14", 
    "lf_number": "0145", 
    "code": 4433, 
    "name": "abc coorperation", 
    "group2": 3817, 
    "group1": 32, 
    "postalcode": "22926", 
    "status": 2 
} 
], 
"@timestamp": "2017-09-04", 
"parent": { 
    "child": [ 
    { 
    "w_2": 0.5, 
    "w_1": 0.1, 
    "id": 14226, 
    "name": "air" 
    }, 
    { 
    "w_2": null, 
    "w_1": 91, 
    "id": 25002, 
    "name": "Water" 
    }] 
}, 
"p_name": "anacin", 
"@version": "1", 
"id": 28841 
} 

Ich möchte die Details bearbeiten. Ich möchte neue Felder erstellen.

Field 1) coorperations: (details.name | details.postal_code details.street ; details.name | details.postal_code details.street) 

Output: 
Coorperations: (abc coorperation |22926 xyz 14; abc coorperation | 22926 mnc 14) 

Field 2) access_code: (details.status-details.id-details.group1-details.group2-details.group(always two digit)/details.year(only last two digits); details.status-details.id-details.group1-details.group2-details.group(always two digit)/details.year(only last two digits)) 

Output: access_code (2-32-3817-03-06; 2-32-3817-02-07) 

Wie kann ich diese Werte in Details für alle erreichen. So sollten Endergebnisse aussehen.

{ 
"@timestamp": "2017-09-04", 
"parent": { 
"child": [ 
{ 
    "w_2": 0.5, 
    "w_1": 0.1, 
    "id": 14226, 
    "name": "air" 
    }, 
    { 
    "w_2": null, 
    "w_1": 91, 
    "id": 25002, 
    "name": "Water" 
    }] 
}, 
"p_name": "anacin", 
"@version": "1", 
"id": 28841, 
"Coorperations" : "abc coorperation |22926 xyz 14; abc coorperation | 22926 mnc 14", 
"access_code" : "2-32-3817-03-06; 2-32-3817-02-07" 
} 

Antwort

0

Sie können versuchen, diesen Code in Schienen Konsole mit Hash zu laufen ist Ihr json:

new_hash = hash.except(:details) 
coorperations = "" 
access_code = "" 
elements = hash[:details] 
elements.each do |element| 
    coorperations = "#{coorperations}#{if coorperations.present? then '; ' else '' end}#{element[:name]} | #{element[:postal_code]} #{element[:street]}" 
    access_code = "#{access_code}#{if access_code.present? then '; ' else '' end}#{element[:status]}-#{element[:id]}-#{element[:group1]}-#{element[:group2]}-#{element[:group1]}-#{element[:group]}" 
end 
new_hash.merge!(Coorperations: coorperations) 
new_hash.merge!(access_code: access_code) 
new_hash 
Verwandte Themen