【问题标题】:Parse XML structure into JSON object string using Jackson使用 Jackson 将 XML 结构解析为 JSON 对象字符串
【发布时间】:2018-08-26 19:03:39
【问题描述】:

我需要帮助来将此 XML 消息解析为 JSON 结构。我尝试使用XmlMapper 使用 Jackson 库。它不断给出解析错误。我需要解析出多余的字符吗?

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ns2:GetLineItemDetailResponse xmlns:ns2="http://schema.tmt.com/transactionlineitemdetail/loyalty/v1">
    <GetLineItemDetailResult>
        <Coupons>
            <Coupon>
                <CouponType>sim_default_CouponType</CouponType>
                <CouponNumber>sim_default_CouponNumber</CouponNumber>
                <LineNumber>0</LineNumber>
                <Amount>0</Amount>
            </Coupon>
        </Coupons>
        <Tenders>
            <Tender>
                <TenderCode>sim_default_TenderCode</TenderCode>
                <Amount>0</Amount>
                <RedemptionID>0</RedemptionID>
            </Tender>
        </Tenders>
        <LineItems>
            <LineItem>
                <LineNumber>0</LineNumber>
                <Type>1</Type>
                <Quantity>0</Quantity>
                <TotalTax>0</TotalTax>
                <UPC>sim_default_UPC</UPC>
                <UnitPrice>0</UnitPrice>
                <ExtendedPrice>0</ExtendedPrice>
                <TotalPrice>0</TotalPrice>
                <OriginalRFN xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
                <OriginalOrderID xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
                <IneligForRedeem>false</IneligForRedeem>
                <RX>
                    <Days>0</Days>
                    <ThirtyTo90>false</ThirtyTo90>
                    <GovtFunded>1970-01-01T00:00:00</GovtFunded>
                    <RXType>NEW</RXType>
                    <PartialFill>false</PartialFill>
                    <ImmunInd>false</ImmunInd>
                    <ImmunType>sim_default_ImmunType</ImmunType>
                    <RXEligibleInd>false</RXEligibleInd>
                </RX>
                <ns3:UPCDescription xmlns:ns3="http://www.epsilon.com/webservices/">sim_default_UPCDescription</ns3:UPCDescription>
            </LineItem>
        </LineItems>
        <Redemption>
            <AwardID>0</AwardID>
            <Amount>0</Amount>
            <Points>0</Points>
        </Redemption>
    </GetLineItemDetailResult>
</ns2:GetLineItemDetailResponse>

我试过这个:

   XmlMapper xmlMapper = new XmlMapper();
   JsonNode node = xmlMapper.readTree(xml.getBytes());

   ObjectMapper jsonMapper = new ObjectMapper();
   String json = jsonMapper.writeValueAsString(node);
   System.out.println(json);

但是一直报错

Misshaped close tag at 2299 [character 91 line 52]

【问题讨论】:

  • 您看到的错误是什么?
  • 我已经尝试过解决方案,但没有奏效。
  • 在 2299 [字符 91 第 52 行] 处的闭合标签形状错误
  • 当我从文件中读取 XML 时,它适用于我。 XML 只有 50 行。您如何将 XML 读入您的程序?

标签: java json xml jackson


【解决方案1】:

您可以使用 JSONObject 库将您的 xml 转换为 JSON。

  String xml = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n" +
                "<ns2:GetLineItemDetailResponse xmlns:ns2=\"http://schema.tmt.com/transactionlineitemdetail/loyalty/v1\">\n" +
                "    <GetLineItemDetailResult>\n" +
                "        <Coupons>\n" +
                "            <Coupon>\n" +
                "                <CouponType>sim_default_CouponType</CouponType>\n" +
                "                <CouponNumber>sim_default_CouponNumber</CouponNumber>\n" +
                "                <LineNumber>0</LineNumber>\n" +
                "                <Amount>0</Amount>\n" +
                "            </Coupon>\n" +
                "        </Coupons>\n" +
                "        <Tenders>\n" +
                "            <Tender>\n" +
                "                <TenderCode>sim_default_TenderCode</TenderCode>\n" +
                "                <Amount>0</Amount>\n" +
                "                <RedemptionID>0</RedemptionID>\n" +
                "            </Tender>\n" +
                "        </Tenders>\n" +
                "        <LineItems>\n" +
                "            <LineItem>\n" +
                "                <LineNumber>0</LineNumber>\n" +
                "                <Type>1</Type>\n" +
                "                <Quantity>0</Quantity>\n" +
                "                <TotalTax>0</TotalTax>\n" +
                "                <UPC>sim_default_UPC</UPC>\n" +
                "                <UnitPrice>0</UnitPrice>\n" +
                "                <ExtendedPrice>0</ExtendedPrice>\n" +
                "                <TotalPrice>0</TotalPrice>\n" +
                "                <OriginalRFN xsi:nil=\"true\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"/>\n" +
                "                <OriginalOrderID xsi:nil=\"true\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"/>\n" +
                "                <IneligForRedeem>false</IneligForRedeem>\n" +
                "                <RX>\n" +
                "                    <Days>0</Days>\n" +
                "                    <ThirtyTo90>false</ThirtyTo90>\n" +
                "                    <GovtFunded>1970-01-01T00:00:00</GovtFunded>\n" +
                "                    <RXType>NEW</RXType>\n" +
                "                    <PartialFill>false</PartialFill>\n" +
                "                    <ImmunInd>false</ImmunInd>\n" +
                "                    <ImmunType>sim_default_ImmunType</ImmunType>\n" +
                "                    <RXEligibleInd>false</RXEligibleInd>\n" +
                "                </RX>\n" +
                "                <ns3:UPCDescription xmlns:ns3=\"http://www.epsilon.com/webservices/\">sim_default_UPCDescription</ns3:UPCDescription>\n" +
                "            </LineItem>\n" +
                "        </LineItems>\n" +
                "        <Redemption>\n" +
                "            <AwardID>0</AwardID>\n" +
                "            <Amount>0</Amount>\n" +
                "            <Points>0</Points>\n" +
                "        </Redemption>\n" +
                "    </GetLineItemDetailResult>\n" +
                "</ns2:GetLineItemDetailResponse>";

        System.out.println(xml);
        JSONObject obj = XML.toJSONObject(xml);
        System.out.println(obj);

【讨论】:

    【解决方案2】:

    以下对我有用:

    public static void main(String[] args) throws IOException {
    
        String xml = new String(Files.readAllBytes(Paths.get(".... /xmlfile.xml")));
    
        XmlMapper xmlMapper = new XmlMapper();
        JsonNode node = xmlMapper.readTree(xml.getBytes());
    
        ObjectMapper jsonMapper = new ObjectMapper();
        String json = jsonMapper.writeValueAsString(node);
    
        System.out.println(json);
    }
    

    如果仍然失败,可以尝试一些方法:

    • 尝试删除处理指令&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?&gt;。您上面的代码似乎在此之前有前导空格。对吗?
    • 检查源 XML 是否通过验证。
    • 检查源 XML 中的尾随字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多