2 回答

TA貢獻1842條經驗 獲得超22個贊
為此,您可以使用camaro。camaro 允許您編寫一個基于 xpath 的模板來指定您想要的輸出方式。在這種情況下,你指定你想要一個數組
const { transform } = require('camaro')
const xml = `<Shift>
<Transaction>
<Currency>GBP</Currency>
<Amount>24.50</Amount>
</Transaction>
<Transaction>
<Currency>GBP</Currency>
<Amount>25.50</Amount>
</Transaction>
<Transaction>
<Currency>GBP</Currency>
<Amount>26.50</Amount>
</Transaction>
<Transaction>
<Currency>GBP</Currency>
<Amount>27.50</Amount>
</Transaction>
</Shift>`
;(async function () {
const template = {
transactions: ['/Shift/Transaction', {
Currency: 'Currency',
Amount: 'Amount'
}]
}
console.log(await transform(xml, template));
})()
輸出
{ transactions:
[ { Currency: 'GBP', Amount: '24.50' },
{ Currency: 'GBP', Amount: '25.50' },
{ Currency: 'GBP', Amount: '26.50' },
{ Currency: 'GBP', Amount: '27.50' } ] }
即使只有 1 個元素
const { transform } = require('../')
const xml = `<Shift>
<Transaction>
<Currency>GBP</Currency>
<Amount>24.50</Amount>
</Transaction>
</Shift>`
;(async function () {
const template = {
transactions: ['/Shift/Transaction', {
Currency: 'Currency',
Amount: 'Amount'
}]
}
console.log(await transform(xml, template));
})()
輸出
{ transactions: [ { Currency: 'GBP', Amount: '24.50' } ] }

TA貢獻1858條經驗 獲得超8個贊
有很多 XML 到 JSON 轉換器,它們都有這種問題。它們在某些情況下會做您想做的事,而在其他情況下則不會,而且它們都沒有提供太多控制權。如果您想控制生成的 JSON,我建議使用 XSLT 3.0:這允許您在調用xml-to-json()
進行轉換之前將 XML 轉換為與您想要生成的 JSON 的結構相對應。
添加回答
舉報