使用增量“密钥名称”进行空手道架构 JSON 验证

问题描述 投票:0回答:1

在我的 json 模式中,我需要管理具有“增量”名称的密钥:

例如:

  [
   {
        "id": 9396,
        "value": "toto",
        "attribut": "blue",
        "occur1": null,
        "occur2": null,
        "occur3": null,
        "occur4": null,
        "occur5": null,
        "occur6": null,
        "occur7": null,
        "occur8": {
            "occurenceId": 105498,
            "year": "2023",
            "quantity": 707
        },
        "occur9": {
            "occurenceId": 105499,
            "year": "2023",
            "quantity": 371
        },
        "occur10": {
            "occurenceId": 105500,
            "year": "2023",
            "quantity": 875
        },
        "occur11": null,
        "occur12": null
    },
    {
        "id": 9417,
        "value": "momo",
        "attribut": "red",
        "occur1": {
            "occurenceId": 105502,
            "year": "2023",
            "quantity": 85
        },
        "occur2": null,
        "occur3": {
            "occurenceId": 105503,
            "year": "2023",
            "quantity": 432
        },
        "occur4": null,
        "occur5": null,
        "occur6": null,
        "occur7": null,
        "occur8": null,
        "occur9": null,
        "occur10": null,
        "occur11": null,
        "occur12": null
    }
 ]

如何管理从发生1到发生12的每个键“发生”而不使用自己的模式编写每一行?

我只尝试保持完整的结构:

 * def MyStruct =
  """
  { 
    id: '#number',
    value: '#number',
    attribut: '#string',
    occur1: '##({occurenceId: '#number', year: '#string', quantity: '#number' })',
    occur2: '##({occurenceId: '#number', year: '#string', quantity: '#number' })',
    occur3: '##({occurenceId: '#number', year: '#string', quantity: '#number' })',
    occur4: '##({occurenceId: '#number', year: '#string', quantity: '#number' })',
    occur5: '##({occurenceId: '#number', year: '#string', quantity: '#number' })',
    occur6: '##({occurenceId: '#number', year: '#string', quantity: '#number' })',
    occur7: '##({occurenceId: '#number', year: '#string', quantity: '#number' })',
    occur8: '##({occurenceId: '#number', year: '#string', quantity: '#number' })',
    occur9: '##({occurenceId: '#number', year: '#string', quantity: '#number' })',
    occur10: '##({occurenceId: '#number', year: '#string', quantity: '#number' })',
    occur11: '##({occurenceId: '#number', year: '#string', quantity: '#number' })',
    occur12: '##({occurenceId: '#number', year: '#string', quantity: '#number' })'
  }

但是我想知道如果明天我需要增加发生次数,是否可以动态定义键“occurr(i)”以获得更优雅和灵活的东西。

谢谢

karate
1个回答
0
投票

我想我有一个更干净的解决方案给你。它应该会提示您想出您满意的最终方法。

* def response = 
"""
{
  id: 9417,
  value: 'momo',
  attribut: 'red',
  occur1: {
    occurenceId: 105502,
    year: '2023',
    quantity: 85
  },
  occur2: null,
  occur3: {
    occurenceId: 105503,
    year: '2023',
    quantity: 432
  },
  occur4: null,
  occur5: null
}
"""    
* def items = []
* karate.forEach(response, (k, v) => { if (k.startsWith('occur') && v) items.push(v) })
* match each items == { occurenceId: '#number', year: '#string', quantity: '#number' }

一些类似的想法,请参阅:https://stackoverflow.com/a/76912833/143475

© www.soinside.com 2019 - 2024. All rights reserved.