给定以下HTTP响应:
{"id":"1", "name":test"}目前,当您在"Edition > Preferences > Project设置> Modules Manager > JSON“中选中”将JSON请求/响应视为xml内容“(为了能够使用xpath而不是regexp)时,您有一个完全无用的东西,如:
<ObjectNode>
<__children>
<entry>
<string>id</string>
<__value>1</__value>
</entry>
etc...注意:这是无用的,因为当您有深入的JSON响应时,您有类似于: ArrayNode/__children/child::ObjectNode/__children/entrychild::string/text()='data'/ObjectNode/__children/entrychild::string/text()='id'/IntNode/__value的XPath
我已经成功地创建了一个扩展,在其中解析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转换我的解码器返回值的方式?
我尝试在解码器中直接返回JSONObject或JSONArray,然后使用命名器,但名称似乎只用于请求,而不是响应。
任何提示都是感激的!
发布于 2014-10-30 10:34:28
我发现模拟真实JSON的“更容易”的方法是执行以下操作。
首先,执行正常的网页调用,并通过高级面板添加一个变量来捕获所有响应( regexp to use is (.*))。
然后,使用具有以下内容的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要强大得多,也容易得多。
https://stackoverflow.com/questions/26634768
复制相似问题