【问题标题】:How to rename a key in JSON如何重命名 JSON 中的密钥
【发布时间】:2018-06-14 07:58:11
【问题描述】:

这是我的 xml

<?xml version="1.0" encoding="utf-8"?>
<p:Order xmlns:p="http://no.lyse.ikt.altisalg.Order" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="filename.xsd" source="AltiSalg 2.4.4-IB-154-IB-154 (154)"><p:Customer><p:OrderId></p:OrderId>
<p:FirstName></p:FirstName>
<p:LastName></p:LastName>
<p:EmailAddress></p:EmailAddress>
<p:BirthDate></p:BirthDate>
<p:CellularPhone></p:CellularPhone>
<p:City></p:City>
<p:Country></p:Country>
<p:PostalCode></p:PostalCode>
<p:StreetAddress></p:StreetAddress>
<p:PartnerId></p:PartnerId>
<p:CommunicationPreferences><p:Phone></p:Phone>
<p:Email></p:Email>
<p:Mail></p:Mail>
<p:SMS></p:SMS>
</p:CommunicationPreferences>
<p:ServiceAgreement><p:AgreementType></p:AgreementType>
<p:AgreementStartDate></p:AgreementStartDate>
<p:AgreementStatus></p:AgreementStatus>
<p:Comment></p:Comment>
<p:ListOfAssets><p:Asset><p:ProductPartNumber></p:ProductPartNumber>
<p:Comments></p:Comments>
</p:Asset>
<p:Asset><p:ProductPartNumber></p:ProductPartNumber>
<p:Comments></p:Comments>
</p:Asset>
<p:Asset><p:ProductPartNumber></p:ProductPartNumber>
<p:Comments></p:Comments>
</p:Asset>
<p:Asset><p:ProductPartNumber></p:ProductPartNumber>
<p:Comments></p:Comments>
</p:Asset>
<p:Asset><p:ProductPartNumber></p:ProductPartNumber>
<p:Comments></p:Comments>
</p:Asset>
<p:Asset><p:ProductPartNumber></p:ProductPartNumber>
<p:Comments></p:Comments>
</p:Asset>
</p:ListOfAssets>
</p:ServiceAgreement>
</p:Customer>
</p:Order>

当我尝试转换为 xmltojson 时,我得到了以下屏幕截图键。 我需要从所有键中删除 p:。由于 p: 即将到来,我无法访问密钥。当我试图在线检查转换它的工作时,它不会从我的代码中删除。我正在处理节点并使用 "xml-to-json-promise" 模块

https://prnt.sc/hvzrzf

注意:我不能对 XML 文件进行任何更改。

【问题讨论】:

  • 一个快速的解决方案可能是将任何出现的"p: 替换为"。我会在捕获中包含 " 以避免从实际内容中删除文本。例如:The ship: Lousiana。或者甚至可以在源材料中替换。&lt;p: 替换为 &lt;

标签: json node.js xml xml-parsing converter


【解决方案1】:

xml-to-json-promise 基于xml2js 包(它本身基于sax-js)。我使用xml2js 并自己承诺,但诀窍是options.tagNameProcessors。了解他们in the docs

像这样使用它:

const prefixMatch = new RegExp(/(?!xmlns)^.*:/)
function stripPrefix(str) {
  return str.replace(prefixMatch, '');
}
convert.xmlDataToJSON(xml, {
  tagNameProcessors: [stripPrefix]
  // other options too
})

这包含在xml2js 包中,可能需要这样:

const {stripPrefix} = require('xml2js/lib/processors')

不管怎样,你去吧!处理标记名称以重命名密钥(删除任何先前的前缀)。

【讨论】:

    猜你喜欢
    • 2012-11-03
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 2014-04-17
    相关资源
    最近更新 更多