Gatling : 正则表达式从 JSON 中获取特定值
Posted
技术标签:
【中文标题】Gatling : 正则表达式从 JSON 中获取特定值【英文标题】:Gatling : regex to get a specific value from a JSON 【发布时间】:2022-01-22 07:03:39 【问题描述】:我有这个来自 html 的 JSON 对象。
"isCompany": false,
"accommodations": [
"id": "00000000031000006435",
"isChecked": false,
"name": "Théo",
"addressLine1": "Rue des patriotes 40 Y",
"addressLine2": "1050 Ixelles",
"nightsDeclared": 5,
"schoolNightsDeclared": 3,
"schoolNightsAttached": 0,
"taxableNights": 2.0,
"totalPayment": 0.0,
"isInProgress": true,
"isLate": false,
"isPayed": "false",
"deadline": "2021-12-31",
"initialAmount": 0.0,
"remainingAmount": 0.0
,
"id": "00000000031000006438",
"isChecked": false,
"name": "Théo",
"addressLine1": "Rue des Gens 45 B",
"addressLine2": "1040 Etterbeek",
"nightsDeclared": 5,
"schoolNightsDeclared": 3,
"schoolNightsAttached": 0,
"taxableNights": 2.0,
"totalPayment": 0.0,
"isInProgress": true,
"isLate": false,
"isPayed": "false",
"deadline": "2021-12-31",
"initialAmount": 0.0,
"remainingAmount": 0.0
]
我知道在 Gatling 中,可以通过编写这个正则表达式来获取住宿 ID:
check(regex(""""accommodations":\[\"id":"(.*?)"""").saveAs("accommodationId"))
现在我的问题是,获得 "isInProgress" 的正则表达式是什么?
【问题讨论】:
为什么要使用正则表达式而不是反序列化和作为字典访问? IE。[a['id'] for a in json.loads(json_string)['accommodations']]
。另外,您是否尝试过简单地将id
替换为您想要的字段名称?
我想强烈强调@DannyVarod 的评论。您无法保证 JSON 将继续以这种方式显示。正确的答案是使用json.loads
将其转换为 Python 结构。与尝试正则表达式相比,它的麻烦少得多、微妙得多,性能也不差。
【参考方案1】:
不要!
在这种特定情况下使用正则表达式可能会导致您的代码在轻微的输入更改时中断,并导致代码不可读。
而是反序列化并作为字典访问?
[a['id'] for a in json.loads(json_string)['accommodations']]
另外,您是否尝试过简单地将id
替换为您想要的字段名称?
如果您坚持为此使用正则表达式,请查看 regex101.com、regexr.com、regextester.com 等在线正则表达式网站(搜索“在线正则表达式测试”)并尝试自己解决此问题。如果您的代码不起作用,请再次提问。
【讨论】:
【参考方案2】:好的,你的正则表达式中有这个
"id":"(.*?)"
您只需将预期的密钥名称更改为isInProgress
或任何其他名称。还要注意"
周围的(.*?)
- 因为id
的值是一个字符串,所以它们是必需的,但是isInProgress
中的值是另一个type。
【讨论】:
以上是关于Gatling : 正则表达式从 JSON 中获取特定值的主要内容,如果未能解决你的问题,请参考以下文章