在WSO2 EI中如何获取响应中的单个整数值
这个问题我之前在处理WSO2 EI的JSON响应时也碰到过,纯数字这类JSON原始值确实容易踩坑,下面给你两种可行的解决思路:
方法一:直接用Script Mediator读取原始 payload
因为返回的是纯数字(属于JSON原始类型,非对象/数组),常规的json.get()方法没法直接获取,我们可以读取整个payload的原始字符串再转换为数字:
// 读取payload的原始字符串内容 var payloadStr = mc.getPayloadXML().toString(); // 转换为数字(整数用parseInt,浮点数用parseFloat) var numValue = parseInt(payloadStr); // 将值存入属性,供后续中介使用 mc.setProperty("responseNumber", numValue);
如果担心XML转换的问题,也可以直接读取输入流:
var inputStream = mc.getPayloadInputStream(); var reader = new java.io.BufferedReader(new java.io.InputStreamReader(inputStream)); var payloadStr = reader.readLine(); var numValue = Number(payloadStr); mc.setProperty("responseNumber", numValue); // 必须重置输入流,否则后续中介会找不到数据 inputStream.reset();
方法二:先包装为JSON对象再用JSON Path读取
如果更习惯用JSON Path语法处理,可以先用Payload Factory把纯数字包装成标准JSON对象,再通过路径取值:
- 先用Payload Factory Mediator包装响应:
<payloadFactory media-type="json"> <format>{"result": $1}</format> <args> <arg evaluator="xml" expression="$body/text()"/> </args> </payloadFactory>
- 之后就可以用常规方式取值了:
- JSON Path表达式:
json-eval($.result) - Script Mediator里可以用:
var numValue = mc.getPayloadJSON().get("result");
- JSON Path表达式:
为什么常规方法取不到值?
WSO2的JSON处理组件对JSON原始类型(数字、字符串、布尔值)的解析逻辑和对象/数组不同,默认不会为这类值生成根节点,所以直接用json-eval($.)或json.get()会返回空对象{},必须通过读取原始内容或包装为对象的方式处理。
内容的提问来源于stack exchange,提问作者ashok
相关产品推荐
相关产品推荐

