我正在建立一个加密的2.1.3场景,我需要从json体中提取数据。
身体的例子:
[
{
"objectId": "FirstFoo",
"pvrId": "413"
"type": "foo",
"name": "the first name",
"fooabilities": {
"foo1": true,
"foo2": true
},
"versions": [23, 23, 23, 23, 23, 23, 24, 23, 23],
"logo": [
{
"type": "firstlogo",
"width": 780,
"height": 490,
"url": "firstlogos/HD/{resolution}.png"
}
]
},
{
"objectId": "SecondFoo",
"pvrId": "414"
"type": "foo",
"name": "the second name",
"fooabilities": {
"foo1": true,
"foo2": false
},
"versions": [23, 23, 23, 23, 23, 23, 24, 23, 23],
"logo": [
{
"type": "secondlogo",
"width": 780,
"height": 490,
"url": "secondlogos/HD/{resolution}.png"
}
]
}
]
我有这个代码试图提取de数据:
exec(
http("get object")
.get(commons.base_url_ws + "/my-resource/2.0/object/")
.headers(commons.headers_ws_session).asJSON
.check(jsonPath("$..*").findAll.saveAs("MY_RESULT"))) (1)
.exec(session => {
foreach("${MY_RESULT}", "result") { (2)
exec(session => {
val result= session("result").as[Map[String, Any]]
val objectId = result("objectId")
val version = result("version")
session.set("MY_RESULT_INFO", session("MY_RESULT_INFO").as[List[(String,Int)]] :+ Tuple2(objectId, version))
})
}
session
})
我的目标是: 从版本数组中提取objectId和第9个值。 我希望它看起来像Vector - >会话中的[(id1,version1),(id2,version2)]稍后在另一次API调用中重用。
我担心的是: (1)这是否会在完整子对象的会话中创建条目?因为在其他答案中,我总是保存一张地图(" id" = [{...}]),这里我没有ids。
(2)在日志中,我看到会话加载了大量数据,但是这个foreach从未被调用过。什么可能导致这种情况?
我在Scala的经历是一个初学者,所以请指出我是否有明确的问题,我没有看到。
我已经研究过这个问题:Gatling - Looping through JSON array并没有完全回答我的问题。
非常感谢!
答案 0 :(得分:0)
我找到了一种用正则表达式做的方法。
.check(regex("""(?:"objectId"|"version"):"(.*?)",.*?(?:"objectId"|"version"):\[(?:.*?,){9}([0-9]*?),.*?\]""").ofType[(String, String)].findAll saveAs ("OBJECTS")))
然后我可以使用这个
foreach("${OBJECTS}", "object") {
exec(
http("Next API call")
.get(commons.base_url_ws + "/my-resource/2.0/foo/${object._1}/${object._2}")
[...]
}