【问题标题】:Need to merge multiple json into single json in neo4j using cypher query需要使用密码查询将多个json合并为neo4j中的单个json
【发布时间】:2019-10-27 20:15:19
【问题描述】:

我想在密码中将多个 json 合并为单个 json。 LocalizationKey 是父节点,所有语言都是他的子节点。

我想将所有子节点合并到密码中的单个 json 中。

我已返回密码查询以按以下预期获取数据

MATCH (key:Key)-[*1]->(languages)
WITH key, collect(languages) as Languages
return apoc.map.setKey( key, 'Languages', Languages ) as LocalizationValue

预期输出:

{
  "localizationKey": "P2P_CM_BasicDetails",
  "Languages": [
    {
      "en_US": "Basic details",
      "cz_CZ": "Základní údaje",
      "de_DE": "Grundlegende Details",
      "en_AU": "Basic Details"
    }
  ]
}

目前得到的结果为:

{
  "localizationKey": "P2P_CM_BasicDetails",
  "Languages": [
    {
      "en_US": "Basic details"
    },
    {
      "cz_CZ": "Základní údaje"
    },
    {
      "de_DE": "Grundlegende Details"
    },
    {
      "en_AU": "Basic Details"
    },
  ]
}

【问题讨论】:

  • 您能否指出您的数据的要点。我想尝试第二次 WITH 新收藏

标签: neo4j cypher neo4j-apoc


【解决方案1】:

这个查询:

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

使用apoc.map.merge 合并地图,并返回以下格式的结果(我认为这是您实际上想要的,因为Languages 成为列表没有意义只包含一个对象):

{
  "localizationKey": "P2P_CM_BasicDetails",
  "Languages": {
    "en_AU": "Basic Details",
    "cz_CZ": "Základní údaje",
    "en_US": "Basic details",
    "de_DE": "Grundlegende Details"
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    相关资源
    最近更新 更多