I want to merge multiple json into single json in cypher. LocalizationKey is parent node and all languages is his child node.
I want to merge all child node into single json in cypher.
I have return cypher query to fetch the data as expected below
MATCH (key:Key)-[*1]->(languages)
WITH key, collect(languages) as Languages
return apoc.map.setKey( key, 'Languages', Languages ) as LocalizationValue
Expected output:
{
"localizationKey": "P2P_CM_BasicDetails",
"Languages": [
{
"en_US": "Basic details",
"cz_CZ": "Základní údaje",
"de_DE": "Grundlegende Details",
"en_AU": "Basic Details"
}
]
}
Currently getting result as:
{
"localizationKey": "P2P_CM_BasicDetails",
"Languages": [
{
"en_US": "Basic details"
},
{
"cz_CZ": "Základní údaje"
},
{
"de_DE": "Grundlegende Details"
},
{
"en_AU": "Basic Details"
},
]
}
This query:
MATCH (key:Key)-->(lang)
WITH key, REDUCE(s={}, x IN COLLECT(lang) | apoc.map.merge(s, x)) AS Languages
RETURN apoc.map.merge(key, {Languages: Languages}) AS LocalizationValue
uses apoc.map.merge
to merge maps, and returns a result in the following format (which is what I think you actually want, since it does not make sense for Languages
to be a list containing just a single object):
{
"localizationKey": "P2P_CM_BasicDetails",
"Languages": {
"en_AU": "Basic Details",
"cz_CZ": "Základní údaje",
"en_US": "Basic details",
"de_DE": "Grundlegende Details"
}
}