我正在尝试使用javascript在SOA 12c BPEL assig活动中获取REST服务在json中返回的属性的值。其余服务返回的响应如下:
<messages>
<InputVar>
<json>{
}</json>
</InputVar>
<OutputVar>
<json>{
"response": [
{
"local_product_version": 1,
"local_product_id": 1
},
{
"local_product_version": 1,
"local_product_id": 2
},
{
"local_product_version": 1,
"local_product_id": 3
}
]
}</json>
</OutputVar>
</messages>
当我使用assign活动捕获响应属性值时,变量的值如下:
<id xmlns:def="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="def:string">org.mozilla.javascript.Undefined@41c96386</id>
代替上面的org.mozilla.javascript.Undefined@41c96386,我需要如下所示的属性值:
<id xmlns:def="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="def:string">1</id>
我已经尝试过以下JavaScript语法,但没有运气:
OutputVar.message.data.response.local_product_version
OutputVar.response[0].local_product_version
。您能建议我如何实现同样的目标吗?
谢谢!!
为什么不只是手动从json响应中提取对象:
const txt = `
<messages>
<InputVar>
<json>{
}</json>
</InputVar>
<OutputVar>
<json>{
"response": [
{
"local_product_version": 1,
"local_product_id": 1
},
{
"local_product_version": 1,
"local_product_id": 2
},
{
"local_product_version": 1,
"local_product_id": 3
}
]
}</json>
</OutputVar>
</messages>
`;
const RE = /\<OutputVar\>\s*\<json\>(.*)\<\/json\>\s*\<\/OutputVar\>/s;
const result = RE.exec(txt);
if (result) {
const json = result[1];
const obj = JSON.parse(json)
console.log(obj)
}
所以,您得到了:
// {
// response: [
// { local_product_version: 1, local_product_id: 1 },
// { local_product_version: 1, local_product_id: 2 },
// { local_product_version: 1, local_product_id: 3 }
// ]
// }
现在您将其作为常规JS对象获得,并且可以从中获取所需的任何内容,包括local_product_version