在我的 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)”以获得更优雅和灵活的东西。
谢谢
我想我有一个更干净的解决方案给你。它应该会提示您想出您满意的最终方法。
* 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