【问题标题】:Unexpected string in JSON while parsing XML解析 XML 时 JSON 中出现意外字符串
【发布时间】:2020-07-22 00:21:51
【问题描述】:

我正在尝试从 Oracle DB 中读取基本上是 XML 的 clob,并填充到 AngularJS UI Grid 中。 我对 JSON 做同样的事情,并且工作得很好。

来自后端的 JSON 响应

{"events":{"ORDER_NO":"BBY01-100000709660","ORDER_HEADER_KEY":"2020040811522311790606  ","CREATETS":"2020-04-08 11:52:47","TMPLT_NM":"EOMS_0194                               ","EMAIL_XML":"<email CommunicationType=\"Email\" SourceSystem=\"OMS\" TemplatePageZone=\"\" brand=\"BESTBUY\" channel=\"BESTBUY\" emailAddr=\"test.tester@bestbuy.com\" template=\"EOMS_0178_TEST\">""    <name firstName=\"Test\" lastName=\"\" middleInitial=\"\"/>""    <order ATGID=\"ATG28268080246\" IsSuppressRequired=\"Y\" LoggedInFlag=\"Y\" LoyaltyID=\"0160140134\" OrderName=\"MSFTAllAccess\" PartyID=\"123456\" PriorityNumber=\"160140134\" customerPhoneNo=\"6515554321\" hasActivatedDevice=\"N\" orderDate=\"01/28/2020\" orderHeaderKey=\"2020012813423582265743\" orderIdATG=\"BBY01-1MT2010012802\" orderStatusLinkDisplayFlag=\"Y\" orderTotal=\"0.00\" orderTotalMinusCoupons=\"0.00\" partnerID=\"\" partnerOrderNo=\"MAV513281qweq1\" salesSource=\"BBYC\" shippingTotal=\"0.00\" taxTotal=\"0.00\">""        <creditCard cardType=\"\" number=\"\"/>""        <digitalCoupons digitalCouponTotal=\"0.00\"/>""        <lineItems>""            <lineItem CustPromiseDate=\"02/26/2020\" CustPromiseType=\"InHandDate\" availabilityMsg=\"\" beginEstArrivalDate=\"02/24/2020\" conditionVariableOne=\"\" conditionVariableTwo=\"\" description=\"Microsoft  Surface Pro 3  12  Intel Core i7  256GB  Silver\" endEstArrivalDate=\"02/26/2020\" expectedShipDays=\"\" format=\"\" giftPackaging=\"N\" inHandDate=\"02/26/2020\" itemID=\"\" itemShortDesc=\"Microsoft  Surface Pro 3  12  Intel Core i7  256GB  Silver\" lineItemProductTotal=\"0.00\" lineItemShippingCost=\"0.00\" merchClass=\"\" modelNo=\"1000186097\" orderLineKey=\"2020021911334791500160\" oversizeFlag=\"\" pickupDate=\"\" preOrder=\"\" primeLine=\"1\" productLine=\"6.403.635\" quantity=\"1\" releaseDate=\"\" reshipReasonCode=\"RESHIP_DAMAGED_ITEM\" shipDate=\"\" shippingMethod=\"\" signatureRequiredFlag=\"N\" sku=\"9248206\" status=\"\" subLine=\"1\" tax=\"0.00\" total=\"0.00\" unitPrice=\"0.00\" unitShippingCost=\"0.00\">""                <shippingAddr city=\"RICHFIELD\" line1=\"1000 W 78TH ST\" line2=\"\" state=\"MN\" zip=\"55423\">""                    <name firstName=\"Test\" lastName=\"Tester\" middleInitial=\"\"/>""                </shippingAddr>""                <allowance allowanceAmt=\"0.00\" reason=\"\"/>""                <return date=\"\" lineQty=\"\" lineTotal=\"0.00\" productCredit=\"0.00\" reason=\"\" restockingFee=\"0.00\" shippingCredit=\"0.00\" taxCredit=\"0.00\"/>""                <cancel backOrderExtendedXNumDays=\"\" reason=\"\"/>""                <ros actualDeliveryDate=\"\" pickupDate=\"\"/>""                <store storeName=\"\" storeNum=\"\"/>""                <psp plan=\"\"/>""                <carriers>""                    <carrier los=\"\" name=\"\" quantity=\"\" trackingNum=\"\"/>""                </carriers>""            </lineItem>""        </lineItems>""        <makeGood makeGoodFlag=\"N\"/>""    </order>""    <account atgProfileId=\"\" cirisID=\"\" info=\"\" password=\"\"/>""    <comments/>""</email>"}}

每当我试图读取值时,它都会抛出异常

JSON 中第 372 位的意外字符串 在 JSON.parse (&lt;anonymous&gt;)

下面是 AJAX 响应代码:

$http.get(url).then(function(response) {
    if(response.data.events == null || response.data.events == undefined ||
            response.data.events == "undefined"){
        $("#loader1").hide();
        $scope.close = true;
        $scope.responseMessage = "";
        $scope.gridOptions1.data.length=0;
        $scope.errorMessage = "Order not found!!!!";
    }else{
        console.log("1");
        $("#loader1").hide();
        var responseNew = JSON.stringify(response.data.events);
        $scope.gridOptions1.data = responseNew;
        $scope.mySelectedRows = $scope.gridApi.selection.getSelectedRows();
        $scope.close = true;
        $scope.errorMessage = "";
        $scope.responseMessage = "Order details fetched successfully";
    }
}, function(response) {
    $("#loader1").hide();
    $scope.close = true;
    $scope.responseMessage = "";
    $scope.gridOptions.data.length=0;
    $scope.gridOptions1.data.length=0;
});

【问题讨论】:

  • 那不是有效的 JSON。使用任何在线 JSON 验证器亲自查看,例如jsonlint.com。 --- 例如看最后:&lt;comments/&gt;""&lt;/email&gt;"}}"" 很糟糕,并且似乎是 JSON 文字中应该出现的行终止符。将所有"" 替换为\n\n 这两个字符,而不是换行符),您也许可以修复 JSON,以便对其进行解析。
  • 当我尝试获取 JSON 时也是如此,然后我能够解析。请参阅下面的 JSON:{"events":[{"ORDER_NO":"BBY01-100000709660","ORDER_HEADER_KEY":"2020040811522311790606 ","EVNT_NM":"ORDER_CONFIRMATION_EVENT","RVSN_NO":"1 ","CREATETS":"2020-04-08 11:52:47","EVNT_JSON":"{\"catalog\":\"BBY\",\"created\":\"2020-04-08T11:52:36-05:00\",\"modified\":\"2020-04-08T11:52:36-05:00\",\"submitted\":\"2020-04-08T11:52:19-05:00\",\"userOrderId\":\"BBY01-100000709660\",\"revision\":1,\"purchaseOrderNumber\":\"\"}]}
  • 不要(试图)在评论中发布完整的 JSON。如果您有澄清信息,请编辑问题。
  • @brainSquezer 所附的 json 无效,因为双引号没有正确转义。
  • 上述问题已得到修复,但现在出现以下错误:newRawData.forEach 不是 Grid.modifyRows 的函数

标签: java angularjs ajax rest


【解决方案1】:

上述问题是在将 xml 存储在数据库中时。因为新元素之间有空格。它正在考虑将其作为一个字符串,并在 JSON 中附加双引号。

【讨论】:

    【解决方案2】:

    使用 JSON.parse 而不是 JSON.stringify。你从后端得到的响应(你上面提到的那个)已经是一个字符串化的 JSON,你必须解析它来读取值。

    【讨论】:

      【解决方案3】:

      这里多了一个双引号:

      Parse error on line 1:
      ...\"EOMS_0178_TEST\">""    <name firstName...
      -----------------------^
      Expecting 'EOF', '}', ':', ',', ']', got 'STRING'
      

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 1970-01-01
        • 2017-04-10
        • 2023-02-08
        • 1970-01-01
        • 2022-11-05
        • 1970-01-01
        • 1970-01-01
        • 2016-11-14
        相关资源
        最近更新 更多