我正在尝试使用jstoxml模块在我的Node js服务中将JSON对象转换为XML。我的输入结构是:
{
"user": "505723c5750c1fa2177682ed",
"uri": "http://localhost:3000/users/505723c5750c1fa2177682ed/items",
"items": [
{
"uri": "http://localhost:3000/items/1"
},
{
"uri": "http://localhost:3000/items/2"
}
],
"info": "blah."
}
我期待的结果是:
<user>505723c5750c1fa2177682ed</user>
<uri>http://localhost:3000/users/505723c5750c1fa2177682ed/items</uri>
<items>
<uri>http://localhost:3000/items/1</uri>
</items>
<items>
<uri>http://localhost:3000/items/2</uri>
</items>
<info>blah.</info>
我得到的结果是:
<user>505723c5750c1fa2177682ed</user>
<uri>http://localhost:3000/users/505723c5750c1fa2177682ed/items</uri>
<items>
<uri>http://localhost:3000/items/1</uri>
<uri>http://localhost:3000/items/2</uri>
</items>
<info>blah.</info>
如果有人遇到类似的问题,请帮助我。是否有任何其他npm节点包用于获得预期的结构?
由于
答案 0 :(得分:1)
免责声明:我是Jsonix的作者,这是一个用于XML&lt; - &gt; JS转换的开源JavaScript库。 Jsonix可用于Node.js(参见here)。
Jsonix可以基于映射在XML和JSON之间(在两个方向上)进行转换。映射为您提供了在JSON和XML之间进行转换时的灵活性。这可能是你需要的。
我会让代码发言。这是JSON-&gt; XML转换的演示案例:
var Mapping = {
name : 'Mapping',
typeInfos : [ {
localName : 'Data',
propertyInfos : [ {
name : 'user'
}, {
name : 'uri'
}, {
name : 'items',
collection : true,
typeInfo : '.Item'
}, {
name : 'info'
} ]
}, {
localName : 'Item',
propertyInfos : [ {
name : 'uri'
} ]
} ],
elementInfos : [ {
elementName : {
localPart : 'data'
},
typeInfo : '.Data'
} ]
};
module.exports.Mapping = Mapping;
这里我们有两种类型:根类型(我称之为Data
)和另一种类型Item
。 Data
类型用于根XML元素data
。
好的,现在是marshalling code:
// Create Jsonix context
var context = new Jsonix.Context([ Mapping ]);
var data = {
name : new Jsonix.XML.QName('data'),
value : {
"user" : "505723c5750c1fa2177682ed",
"uri" : "http://localhost:3000/users/505723c5750c1fa2177682ed/items",
"items" : [ {
"uri" : "http://localhost:3000/items/1"
}, {
"uri" : "http://localhost:3000/items/2"
} ],
"info" : "blah."
}
};
var marshaller = context.createMarshaller();
console.log(marshaller.marshalString(data));
以下是您获得的XML:
<data>
<user>505723c5750c1fa2177682ed</user>
<uri>http://localhost:3000/users/505723c5750c1fa2177682ed/items</uri>
<items>
<uri>http://localhost:3000/items/1</uri>
</items>
<items>
<uri>http://localhost:3000/items/2</uri>
</items>
<info>blah.</info>
</data>
链接:
如果您可以将XML与JSON匹配,请检查其他库,例如xml2js。
答案 1 :(得分:0)
答案 2 :(得分:0)
感谢您使用我的图书馆!我为延迟道歉。您可以使用以下结构实现该输出:
[
{"user": "505723c5750c1fa2177682ed"},
{"uri": "http://localhost:3000/users/505723c5750c1fa2177682ed/items"},
[
{"items": {"uri": "http://localhost:3000/items/1"}},
{"items": {"uri": "http://localhost:3000/items/1"}}
],
{"info": "blah."}
]
输出:
<user>505723c5750c1fa2177682ed</user>
<uri>http://localhost:3000/users/505723c5750c1fa2177682ed/items</uri>
<items>
<uri>http://localhost:3000/items/1</uri>
</items>
<items>
<uri>http://localhost:3000/items/1</uri>
</items>
<info>blah.</info>