【发布时间】:2018-05-24 20:47:09
【问题描述】:
我有一个独特的问题,我正在尝试使用一些复杂的 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 以更改它吐出数据的方式?任何建议都将不胜感激。
【问题讨论】:
-
你试过其他的 XML-> json 库吗?图书馆为什么会做出这样的选择已经很清楚了。如何知道这是一个只能出现一次并且应该转换为标量的元素,而不是可以多次出现并且应该成为数组的元素,而恰好只有一个存在?所以它正在做通用翻译。但也许另一个图书馆,或者这个有一些提示的图书馆,可以在这种情况下做出其他选择。
-
嘿,Scott,我没有,但我刚刚在 xml2js 文档中找到了一些我要尝试的东西。
标签: javascript node.js object mean-stack data-manipulation