我在Node服务中有这个功能
pendingBetsForCustomer: function(params) {
return new Promise(function(fullfill, reject) {
var cancel, view, fillOpen,
connection = new sql.Connection(sails.config.connections.myConnection, function(err) {
if (err) {
reject(err);
}
var request = connection.request();
decorateRequestParams(request, params);
request.execute('[SP_NAME].[spREPORTS]', function(err, dataset) {
if (err) {
reject(err);
}
_.map(dataset, function(items) {
return _.map(items, function(item) {
cancel = item.XX_CANCEL;
fillOpen = item.XX_FILL_OPEN;
parseString(cancel, function(err, res) {
cancel = res;
});
parseString(fillOpen, function(err, res) {
fillOpen = res;
});
});
});
_.forEach(dataset, function(report) {
console.log(report); //see below what it returns
fullfill(report);
});
});
});
});
}
在console.log(report)
我得到类似的东西
[ { BET: 57630343,
CUSTOMER: 181645,
SPORT: 'MLB',
XX_FILL_OPEN: '<xxfillopen xml>...</xxfillopen xml>',
XX_CANCEL: '<xxcancel xml>...</xxcancel xml>' },
...
]
那些以XX_
开头的道具是我需要转换为JSON的XML元素,您可以在上面看到(使用xml2js)
_.map(dataset, function(items) {
return _.map(items, function(item) {
cancel = item.XX_CANCEL;
fillOpen = item.XX_FILL_OPEN;
parseString(cancel, function(err, res) {
cancel = res;
});
parseString(fillOpen, function(err, res) {
fillOpen = res;
});
});
});
如果您在上面看到,我有cancel
和fillOpen
现在是json而不是XML,我只需要cancel
而不是XX_CANCEL: '<xxcancel xml>...</xxcancel xml>
认为cancel是具有json格式的对象,与Fill Open相同,如下所示:
{XX_CANCEL: cancel}
我期待这样的事情
[ {
BET: 57630343,
CUSTOMER: 181645,
SPORT: 'MLB',
XX_FILL_OPEN: //PUT HERE THE NEW ATTR IN JSON FORMAT,
XX_CANCEL: //PUT HERE THE NEW ATTR IN JSON FORMAT
},...
]
好的,现在,我有那些以XX_
格式开头的道具,那么我应该怎样做才能将那些新的格式化道具换成json而不是旧格式的道格呢?
答案 0 :(得分:1)
尝试使用地图功能:
_.map(dataset, function(items) {
return _.map(items, function(item) {
parseString(item.XX_CANCEL, function(err, res) {
item.XX_CANCEL = res;
});
parseString(item.XX_FILL_OPEN, function(err, res) {
item.XX_FILL_OPEN = res;
});
});
});
这应该用解析的JSON数据替换xml字符串。