java - 如何从Json字符串中删除双引号 ""

标签 java json web-services double-quotes

我在 JSON 响应中得到以下 'data' 字段的双引号,如下所示 -

{
"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 字符串值中的任何内容并不是一个好的解决方案。您可能可以用引号解决上述问题,但您的代码可读性较差且容易出错 - 将来可能会出现一些新的错误情况,但如果不再次重构以前编写的代码,您的代码将无法处理它们(SOLID 中的 O 失败)。我写了一些小示例代码,可能会有所帮助。尝试尽可能地分离代码中的职责(单一职责)。 org.JSON 库(您在代码中使用的)处理所有 XML 标准,以便有效的 XML 将毫无问题地转换为 JSONObject:

P.S 对于双引号情况,可能您的 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;
    }

关于java - 如何从Json字符串中删除双引号 "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41996325/

相关文章:

java - 将 JList 添加到 JPanel 与 JLabel 不同(除了明显的之外),为什么?

javascript - HtmlUnit 在 js 编译上卡住

javascript - 如何从 json 对象中获取匹配元素的索引?

java - 从转换 JSON 到 XML 生成 Java 代码

java - 如何从Web Service 获取请求源?

java - 内存数据库选项(开源和基于 Java)

java - 在 Ubuntu 16.04 中安装 cassandra 时出现 dpkg oracle Jdk 错误

java - 用户 'admin' @'localhost' 的访问被拒绝(使用密码 : YES)

.net - 提高ajax请求的性能

javascript - 将请求发送到 NodeJS 后端