给出以下HTTP响应:
{"id":"1", "name":test"}
目前,当您在“版本>偏好设置>项目设置>模块管理器> JSON”中检查“将JSON请求/响应视为xml内容”时(为了能够使用xpath而不是regexp) ),你有一个完全无用的东西,如:
<ObjectNode>
<__children>
<entry>
<string>id</string>
<__value>1</__value>
</entry>
etc...
注意:这没用,因为当你有深度JSON响应时,你有XPath: ArrayNode / __孩子/儿童:: ObjectNode / __孩子/进入[子::字符串/文本()= '数据'] / ObjectNode / __孩子/进入[子::字符串/文本()= '身份证'] / IntNode / __值
我设法创建了一个扩展,我在JSONObject或JSONArray中解析JSON,然后我调用
return "<root>"+XML.toString(json)+"</root>";
给了我一个漂亮的
<root><id>1</id><name>test</name></root>
注意:我可以使用xpath轻松处理
问题在于Neoload会将此转换为
<String><root><id>etc...
这与第一个东西一样无用(可能更无用,因为XPath不再是一个选项,因为我只有一个节点)。
所以我的问题是如何改变Neoload改变我的解码器返回值的方式?
我试图直接在Decoder中返回JSONObject或JSONArray,然后使用Namer,但Namer似乎只用于请求,而不是响应。
任何提示都表示赞赏!
答案 0 :(得分:1)
&#34;更容易&#34;我发现模拟真正的JSON的方法是做以下事情。
首先,进行正常的网页调用并通过高级面板添加变量以捕获所有响应(要使用的正则表达式为(。*))。
然后,使用带有以下内容的javascript(此处,EntryResponse是捕获的变量名称)
//get the previous http response and eval it
var resp_ = context.variableManager.getValue("EntryResponse");
if (resp_ == null) {
context.fail("Variable 'EntryResponse' not found");
}
logger.debug("EntryResponse="+resp_);
var resp = eval("("+resp_+")")
//then used resp as real json
logger.debug("Logged User Id="+resp.data.id);
// Inject a value in a runtime variable
context.variableManager.setValue("UserName", resp.data.id);
这并不像它可能那么简单,但这比经典的XPath更强大,更容易