空手道-如何解析响应包含json中的名称空间?



My Karate feature for response:

* def response = response
* print 'response is: ', response 

控制台:

{
"dd:PrepareMasterBookingRS": {
"@Version": "1.27",
"@TransactionID": "123456798",
"dd:Success": {
},
"dd:AvailabilityResponse": {
"dd:RoomStays": {
"dd:RoomStay": [
{
"@RPH": "1",
"dd:RoomTypes": {
"dd:RoomType": [
{
"@NumberOfUnits": "18",
"@RoomTypeCode": "R1123",
"dd:RoomDescription": {
"@Name": "C12N - vvvvvv 1-2 pers. 1 foo"
}
}
]
}
}
]
}
}
}
}

My Karate feature for response:

* def roomStay = response.dd:PrepareMasterBookingRS.dd:AvailabilityResponse.dd:RoomStays.dd:RoomStay[0];

控制台错误:

org.graalvm.polyglot.PolyglotException: SyntaxError: Unnamed:1:11 Expected ; but found :
response.dd:PrepareMasterBookingRS.dd:AvailabilityResponse.dd:RoomStays.dd:RoomStay[0];
^
- org.graalvm.polyglot.Context.eval(Context.java:401)
- com.intuit.karate.graal.JsEngine.evalForValue(JsEngine.java:141)
- com.intuit.karate.graal.JsEngine.eval(JsEngine.java:137)
- com.intuit.karate.core.ScenarioEngine.evalJs(ScenarioEngine.java:1252)
- com.intuit.karate.core.ScenarioEngine.evalKarateExpression(ScenarioEngine.java:2205)
- com.intuit.karate.core.ScenarioEngine.evalKarateExpression(ScenarioEngine.java:2124)
- com.intuit.karate.core.ScenarioEngine.evalAndCastTo(ScenarioEngine.java:1316)

JSON键中的特殊字符必须进行不同的处理。试试这个:

* def roomstay = response['dd:PrepareMasterBookingRS']['dd:AvailabilityResponse']['dd:RoomStays']['dd:RoomStay'][0]

还指出,你可以试着这样的事情:

* def roomstay = $response..['dd:RoomStay']