我是Node.js的新手
我遇到过很多XML 2 Json Conversions,他们都没有满足我的需求。在所有这些转换支持中,我得到一个或另一个错误,因为缺少某些内容并且不支持该版本。
这是我的代码:
exports.index = function(req, res){
var request = require('request');
var url = 'xml-output-throwing-url';
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
res.json(body);
}
});
};
这会抛出将xml渲染为的输出: " HTTP://www.w3.org/2001/XMLSchema-instance \"的xsi:的schemaLocation = \" .. someurl ..."> .. ..输出"
其中包含""。现在我正在尝试将此输出转换为json并从backbone.js渲染它并以一种简洁的方式进行此演示。但是当我在渲染函数中使用JSON.stringify(this.model)时,输出将为空。
我在这里做错了什么?
如何实现这一目标?
我的怀疑是:我是否需要从服务器端将xml转换为json,即来自express.js或backbone。哪个最好?
先谢谢
答案 0 :(得分:1)
https://github.com/buglabs/node-xml2json听起来像个好地方。
var parser = require('xml2json');
// ...
exports.index = function(req, res){
var request = require('request');
var url = 'xml-output-throwing-url';
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
var result = parser.toJson(body, {
object: false,
reversible: false,
coerce: true,
sanitize: true,
trim: true,
arrayNotation: false
});
res.set('Content-Type', 'application/json');
res.send(result);
}
});
};
请注意,我使用的是res.send
而不是res.json
,因为res.json
会将您提供的任何内容(在本例中为字符串!)转换为JSON。这将导致双重逃逸。使用具有适当内容类型的res.send
可以避免这种情况。
您可以使用object: true
从parser.toJson
中获取实际的JS对象,但这意味着服务器上需要额外的工作:解析器会构建一个对象,而res.json
会立即序列化它再次。这不是必要的。
在服务器端进行转换具有优势,因为客户端上的XML处理无法像JSON处理那样无缝地工作。