在输入中,我有一个人员列表.每个人在合同上都有几个地址和角色. 示例:

  • 人员#001具有:
    • 二次住所和纳税地址;
    • 共同认购人和被保险人两个角色
  • 人员#002具有:
    • 两个地址(I)主要住所和纳税地址;
    • 三个角色:共同认购人、参保人和保费缴费人.
{
  "personnes": [
    {
      "refExternePersonne": "BGHT34271",
      "isPersonnePhysique": true,
      "rolesContrat": [
        "CO_SOUSCRIPTEUR",
        "ASSURE"
      ],
      "adresses": [
        {
          "typeAdresse": "RESIDENCE_SECONDAIRE"
        },
        {
          "typeAdresse": "FISCALE"
        }
      ]
    },
    {
      "refExternePersonne": "BGHT34272",
      "isPersonnePhysique": false,
      "rolesContrat": [
        "SOUSCRIPTEUR",
        "PAYEUR_PRIMES",
        "ASSURE"
      ],
      "adresses": [
        {
          "typeAdresse": "FISCALE"
        },
        {
          "typeAdresse": "CORRESPONDANCE"
        }
      ]
    }
  ]
}

为什么我的规格不正确?

[
  {
    "operation": "shift",
    "spec": {
      "personnes": {
        "*": {
          "refExternePersonne": "parties[&1].partyRef",
          "rolesContrat": {
            "*": {
              "SOUSCRIPTEUR": {
                "@(3,isPersonnePhysique)": {
                  "true": {
                    "#%phys%": "tickets.processId"
                  },
                  "false": {
                    "#%morale%": "tickets.processId"
                  }
                },
                "@(3,refExternePersonne)": "policies.subscribers[].partyRef",
                "@(3,idPersonne)": "policies.subscribers[].partyId",
                "@(3,adresses)": "policies.subscribers[].addressesTemp"
              },
              "CO_SOUSCRIPTEUR": {
                "@(3,refExternePersonne)": "policies.cosubscribers[].partyRef",
                "@(3,idPersonne)": "policies.cosubscribers[].partyId",
                "@(3,adresses)": "policies.cosubscribers[].addressesTemp"
              },
              "ASSURE": {
                "@(3,refExternePersonne)": "policies.insured[].partyRef",
                "@(3,idPersonne)": "policies.insured[].partyId",
                "@(3,adresses)": "policies.insured[].addressesTemp"
              }
            }
          }
        }
      }
    }
  }
]

我试着根据人们在合同中的角色,用他们的地址来分组:

  • 具有订阅者角色的人员在策略中分组.订阅者[]
  • 保险角色=>策略.保险[]
  • 角色共同订阅者=>策略.共同订阅者[]

预期输出:

{
  "parties": [
    {
      "partyRef": "BGHT34271"
    },
    {
      "partyRef": "BGHT34272"
    }
  ],
  "policies": {
    "cosubscribers": [
      {
        "partyRef": "BGHT34271",
        "addressesTemp": [
          {
            "typeAdresse": "RESIDENCE_SECONDAIRE"
          },
          {
            "typeAdresse": "FISCALE"
          }
        ]
      }
    ],
    "insured": [
      {
        "partyRef": "BGHT34271",
        "addressesTemp": [
          {
            "typeAdresse": "RESIDENCE_SECONDAIRE"
          },
          {
            "typeAdresse": "FISCALE"
          }
        ]
      },
      {
        "partyRef": "BGHT34272",
        "addressesTemp": [
          {
            "typeAdresse": "FISCALE"
          },
          {
            "typeAdresse": "CORRESPONDANCE"
          }
        ]
      }
    ],
    "subscribers": [
      {
        "partyRef": "BGHT34272",
        "addressesTemp": [
          {
            "typeAdresse": "FISCALE"
          },
          {
            "typeAdresse": "CORRESPONDANCE"
          }
        ]
      }
    ]
  },
  "tickets": {
    "processId": "%morale%"
  }
}

推荐答案

我认为你最好用循环的逻辑来思考,比如

[
  { // grouping by elements of "rolesContrat" 
    // and then by "refExternePersonne" values phase
    "operation": "shift",
    "spec": {
      "personnes": {
        "*": {
          "refExternePersonne": "parties[&1].partyRef",
          "rolesContrat": {
            "*": {
              "*": {
                "@3,refExternePersonne": "&.&2.partyRef",
                "@3,adresses": "&.&2.addressesTemp",
                "@3,isPersonnePhysique": "&.&2.PP"
              }
            }
          }
        }
      }
    }
  },
  { // renaming phase
    "operation": "shift",
    "spec": {
      "parties": "&",
      "CO_SOU*": {
        "*": {
          "*": "policies.cosubscribers[#2].&"
        }
      },
      "ASSURE": {
        "*": {
          "*": "policies.insured[#2].&"
        }
      },
      "SOUS*": {
        "*": {
          "PP": {
            "true": {
              "#%phys%": "tickets.processId"
            },
            "false": {
              "#%morale%": "tickets.processId"
            }
          },
          "*": "policies.subscribers[#2].&"
        }
      }
    }
  },
  { // phase of removing the extra attribute which is "PP" 
    "operation": "remove",
    "spec": {
      "*": {
        "*": {
          "*": {
            "PP": ""
          }
        }
      }
    }
  }
]

Json相关问答推荐

Golang JSON Date Tim.Date()测试请求

Jolt需要将缺少的值设置为空并保持相同的位置

PowerShell脚本未按预期生成预期的JSON输出

如何在Vega中使标记的符号在鼠标指针悬停时可点击

使用JQ在数组中 Select 第一个具有匹配项的项

无法访问id的第三级json

Python 将 struct 化文本转换和筛选为对象

将boost::beast::multibuffer转换为std::istream

NiFi 使用嵌套数组将 avro 转换为 JSON 数组格式

golang递归json来构造?

修改 boost::json::object 中的值

在 JOLT 中重新排列值

如何在循环中传递列表(会话(字符串属性))以在 Gatling Scala 中创建批量 Json 请求

如何实现一个通用的 serde_json::from_str

使用 json 值过滤 Django 模型

使用 Javascript 判断 JSON 对象是否包含值

IE中Json响应下载(7~10)

将循环 struct 转换为 JSON - 有什么方法可以找到它抱怨的字段?

java.lang.BootstrapMethodError:调用站点#4 bootstrap 方法的异常,初始化 retrofit 时

有没有一种快速的方法可以在文本编辑器中将 JavaScript 对象转换为有效的 JSON?