JSON 在 Mule 3 中变换
JSON transform in Mule 3
我有一个 JSON 负载,看起来像:
[{
"CUSTOMERAP": [{
"CUSTOMERID": [
"7685940002,24424424,244322,1224,68"
]
}, {
"RATING": [
"76859400022,24424424,244262,1234,68"
]
}]
}, {
"CLIENTAP": [{
"CUSTOMERID": [
"76859404002,24422424,246422,1254,68"
]
}, {
"RATING": [
"76859400022,24422424,244522,1264,68"
]
}]
}]
我想把它改成类似
的东西
[{
"CUSTOMERAP": [{
"ID": [
"7685940002,24424424,244322,1224,68",
"76859400022,24424424,244262,1234,68"
]
}]
}, {
"CLIENTAP": [{
"ID": [
"76859404002,24422424,246422,1254,68",
"76859400022,24422424,244522,1264,68"
]
}]
}]
我尝试使用 foreach 进行迭代,但无法使用 #[message.payload."title"] 单独获取标题,因为它们都不一样。
在 Web 浏览器的控制台中试试这个。创建一个 var jsonData
var jsonData = [
{
"CUSTOMERAP": [{
"CUSTOMERID": [
"7685940002,24424424,244322,1224,68"
]
},
{
"RATING": [
"76859400022,24424424,244262,1234,68"
]
}
]
},
{
"CLIENTAP": [{
"CUSTOMERID": [
"76859404002,24422424,246422,1254,68"
]
},
{
"RATING": [
"76859400022,24422424,244522,1264,68"
]
}
]
}
]
输入这个
jsonData[0].CUSTOMERAP[0].CUSTOMERID
你会得到 ["7685940002,24424424,244322,1224,68"] 等等应用循环获取索引并获取所有值并创建一个新的 var jsonNewDataFormat
并根据需要分配它们
var jsonNewDataFormat = { Id : jsonData[0].CUSTOMERAP[0].CUSTOMERID }
如果您点击此按钮,您将获得新格式的数据,请尝试应用 Json。 Stringfy(google它)
jsonNewDataFormat[0].Id
你的Expression transformer look like? See also, How to transform or modify a JSON payload in Mule ??
是什么
或者,您可以创建一个转换函数。这个好像也不是很难。
var data = [{
"CUSTOMERAP": [{
"CUSTOMERID": [
"7685940002,24424424,244322,1224,68"
]
}, {
"RATING": [
"76859400022,24424424,244262,1234,68"
]
}]
}, {
"CLIENTAP": [{
"CUSTOMERID": [
"76859404002,24422424,246422,1254,68"
]
}, {
"RATING": [
"76859400022,24422424,244522,1264,68"
]
}]
}];
function transformJson(jsonArr, groupingKey) {
return jsonArr.map(itemOuter => {
var wrapper = {}, grouping = {}, keyOuter = Object.keys(itemOuter)[0];
grouping[groupingKey] = itemOuter[keyOuter].map(itemInner => {
var keyInner = Object.keys(itemInner)[0];
return itemInner[keyInner][0];
});
wrapper[keyOuter] = [grouping];
return wrapper;
});
}
console.log(transformJson(data, 'ID'));
.as-console-wrapper { top: 0; max-height: 100% !important; }
我有一个 JSON 负载,看起来像:
[{
"CUSTOMERAP": [{
"CUSTOMERID": [
"7685940002,24424424,244322,1224,68"
]
}, {
"RATING": [
"76859400022,24424424,244262,1234,68"
]
}]
}, {
"CLIENTAP": [{
"CUSTOMERID": [
"76859404002,24422424,246422,1254,68"
]
}, {
"RATING": [
"76859400022,24422424,244522,1264,68"
]
}]
}]
我想把它改成类似
的东西[{
"CUSTOMERAP": [{
"ID": [
"7685940002,24424424,244322,1224,68",
"76859400022,24424424,244262,1234,68"
]
}]
}, {
"CLIENTAP": [{
"ID": [
"76859404002,24422424,246422,1254,68",
"76859400022,24422424,244522,1264,68"
]
}]
}]
我尝试使用 foreach 进行迭代,但无法使用 #[message.payload."title"] 单独获取标题,因为它们都不一样。
在 Web 浏览器的控制台中试试这个。创建一个 var jsonData
var jsonData = [
{
"CUSTOMERAP": [{
"CUSTOMERID": [
"7685940002,24424424,244322,1224,68"
]
},
{
"RATING": [
"76859400022,24424424,244262,1234,68"
]
}
]
},
{
"CLIENTAP": [{
"CUSTOMERID": [
"76859404002,24422424,246422,1254,68"
]
},
{
"RATING": [
"76859400022,24422424,244522,1264,68"
]
}
]
}
]
输入这个
jsonData[0].CUSTOMERAP[0].CUSTOMERID
你会得到 ["7685940002,24424424,244322,1224,68"] 等等应用循环获取索引并获取所有值并创建一个新的 var jsonNewDataFormat 并根据需要分配它们
var jsonNewDataFormat = { Id : jsonData[0].CUSTOMERAP[0].CUSTOMERID }
如果您点击此按钮,您将获得新格式的数据,请尝试应用 Json。 Stringfy(google它)
jsonNewDataFormat[0].Id
你的Expression transformer look like? See also, How to transform or modify a JSON payload in Mule ??
是什么或者,您可以创建一个转换函数。这个好像也不是很难。
var data = [{
"CUSTOMERAP": [{
"CUSTOMERID": [
"7685940002,24424424,244322,1224,68"
]
}, {
"RATING": [
"76859400022,24424424,244262,1234,68"
]
}]
}, {
"CLIENTAP": [{
"CUSTOMERID": [
"76859404002,24422424,246422,1254,68"
]
}, {
"RATING": [
"76859400022,24422424,244522,1264,68"
]
}]
}];
function transformJson(jsonArr, groupingKey) {
return jsonArr.map(itemOuter => {
var wrapper = {}, grouping = {}, keyOuter = Object.keys(itemOuter)[0];
grouping[groupingKey] = itemOuter[keyOuter].map(itemInner => {
var keyInner = Object.keys(itemInner)[0];
return itemInner[keyInner][0];
});
wrapper[keyOuter] = [grouping];
return wrapper;
});
}
console.log(transformJson(data, 'ID'));
.as-console-wrapper { top: 0; max-height: 100% !important; }