簡體   English   中英

如何從Json字符串中刪除雙引號“”

[英]How to remove double quotes " " from Json string

我在這樣的 JSON 響應中得到以下“數據”字段的雙引號 -

{
"bID" : 1000013253,
"bTypeID" : 1,
"name" : "Test1"
"data" : "{"bc": {    "b": {        "t": 1,        "r": 1,        "c": "none"    },    "i": "CM19014269"}}"
}

在驗證此 JSOn 時,我收到如下驗證錯誤

Error: Parse error on line 18:
...   "document" : "[{"bc": {    "b": {    
-----------------------^
Expecting 'EOF', '}', ':', ',', ']'

我希望 JSON 響應顯示為 -

{
"bID" : 1000013253,
"bTypeID" : 1,
"name" : "Test1"
"data" : {"bc": {    "b": {        "t": 1,        "r": 1,        "c": "none"    },    "i": "CM19014269"}}
}

我使用的服務器端代碼是 -

  {
    for (ManageBasketTO manageBasketTO : retList) {
        Long basketId = manageBasketTO.getBasketID();
        BasketTO basketTo = null;
        basketTo = CommonUtil.getBasket(usrCtxtObj, basketId, language, EBookConstants.FOR_VIEWER_INTERFACE,
                usrCtxtObj.getScenarioID(), EBookConstants.YES, request, deviceType);
        String doc = Utilities.getStringFromDocument(basketTo.getdocument());

        doc = doc.replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "");
        doc = doc.replace("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>", "");
        doc = doc.trim();
        JSONObject object = XML.toJSONObject(doc);
        doc = object.toString(4);
        BasketsInfoTO basketsInfoTO = new BasketsInfoTO(bId, manageBasketTO.getBTypeID(), manageBasketTO.getName(), doc);
        basketsToc.add(basketsInfoTO);
        }
    basketInfoRestTO.setBasketsInfoTOList(basketsToc);
    ObjectMapper mapper = new ObjectMapper();
    responseXML = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(basketInfoRestTO);
    responseXML = responseXML.replace("\\\"", "\"");
    responseXML = responseXML.replace("\\n", "");
}

任何幫助深表感謝。 謝謝

解析和替換 XML/JSON 字符串值中的任何內容都不是一個好的解決方案。 您可能可以用引號解決上述問題,但您的代碼可讀性較差且容易出錯 - 將來可能會出現一些新的錯誤情況,但如果不再次重構以前編寫的代碼,您的代碼將無法處理它們( O in SO LID 失敗)。 我寫了一些小的示例代碼,這可能會有所幫助。 盡可能多地分離代碼中的職責(單一職責)。 org.JSON 庫(您在代碼中使用)處理所有 XML 標准,以便將有效的 XML 轉換為 JSONObject 而不會出現任何問題:

PS 對於雙引號的情況,您的 XML 輸入可能無效,或者您的Utilities.getStringFromDocument方法違反了 XML 規范規則。 如我的代碼轉換 XML 字符串所示 - 前后文檔不會破壞 XML / JSON 標准中的任何規范; 如果您的輸入 XML 字符串包含雙引號,那么轉換后的 JSON 字符串也可以。 如果您的輸入 XML 有雙引號,並且您想在轉換過程中刪除它們,那么您可能首先轉換整個文檔,然后僅通過分別從文本創建 JSONObject / JSONArray 實例來重新構造數據

public static void main(String[] args) {
        StringBuilder xmlText = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
                .append("<sample>")
                .append("<rec1>John</rec1>")
                .append("<rec2>Snow</rec2>")
                .append("<data>")
                .append("<a>Season 1</a>")
                .append("<b>Episode 1</b>")
                .append("</data>")
                .append("</sample>");

        // below two lines of code were added in order to show no quote issue might occur in Document conversion case - like question has
        Document doc = convertStringToDocument(xmlText.toString());
        System.out.println("XML string: " + convertDocumentToString(doc));

        JSONObject xmlJSONObj = XML.toJSONObject(xmlText.toString());
        System.out.println("JSON string: " + xmlJSONObj.toString());
    }

    private static Document convertStringToDocument(String input) {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            return builder.parse(new InputSource(new StringReader(input)));
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    private static String convertDocumentToString(Document document) {
        TransformerFactory tf = TransformerFactory.newInstance();

        try {
            Transformer transformer = tf.newTransformer();
            // transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); // remove XML declaration
            StringWriter writer = new StringWriter();
            transformer.transform(new DOMSource(document), new StreamResult(writer));
            return writer.getBuffer().toString();
        } catch (TransformerException e) {
            e.printStackTrace();
        }

        return null;
    }

您可以將雙引號替換為:

String x="\"abcd";
String z=x.replace("\"", "");
System.out.println(z);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM