我有一个独特的问题,我试图用一些复杂的javascript代码来解决。供您参考,我正在使用MongoDB,NodeJS,ExpressJS和VueJS作为我的技术堆栈。
我正在编写一个应用程序,该应用程序向我的外部合作伙伴进行 api 调用,该合作伙伴正在返回一个巨大的基于 xml 的数据文件。(不幸的是,他们无法发送 JSON 数据(。从他们那里收到数据后,我通过 xml2js 库的 parseString 命令运行它。但是它发回代码的方式真的很奇怪。从外面看起来不错,它是一个对象数组:[ {object1},{object2},....{objectN} ]。但是当你查看单个对象时,它会奇怪地格式化数据:
object1 = {
key1: [ 'string' ],
key2: [ '01234657' ],
key3: [ 'email@email.com' ],
key4: [{
key5: [ '8372655573' ],
key6: [ '25.00' ],
key7: [ 'description of item purchased' ]
}],
key8: [ 'otherData' ],
// .......and so on until
NthKey: [ 'dataType' ]
}
我预计我将要接收的大部分数据将由单键到单个数据值对组成,只有少数例外。但是对于从parseString返回对象的每个键,无论如何,它们都将值作为字符串分配给数组。对于一个键输入了一堆不同的数据类型(例如上面示例中的 key4(,我不仅要深入研究一个数组,还要深入研究该数组中的嵌套对象,以及与我的数据关联的各个键...... 我发现这真的很奇怪且难以使用,因为现在我必须创建一堆循环,这些循环基本上是创建对象 1 的复本,除了它看起来像这样:
object1CarbonCopy = {
key1: String,
key2: Number,
key3: email,
key4: {
key5: Number,
key6: Number,
key7: String
},
key8: String
// and so on until........
NthKey: 'dataType'
}
你们中有人对可以做到这一点的代码有建议吗? 或者,如果我可以将设置/选项传递到 xml2js 中以更改它吐出数据的方式?任何建议将不胜感激。
所以我今天学到了一个宝贵的教训,有时你需要多次通读文档,因为你错过了东西。事实证明,有一个选项可以关闭自动数组插入垃圾:
parser = new xml2js.Parser( {explicitArray: false} );
如果您正在查看此问题并且不知道问题是什么,请将 {explicitArray: false} 作为参数传递给解析器构造函数