1. 程式人生 > >處理json中影響解析的多餘引號

處理json中影響解析的多餘引號

在xml中,敏感字元是尖括號,在json中,敏感字元是引號,上文中我們介紹瞭如何處理xml中的敏感字元,本文說說如何處理json中的敏感字元。
思路與上文相同,不再贅述。直接上程式碼:
json–>javaBean

    @Test
    public void test1() {
        String json = "{\"id\":\"1\",\"name\":\"紅\"樓\"'夢\",\"price\":\"90\",\"author\":\"曹雪芹\"}";
        List<String> tags = new ArrayList<String>();
Pattern pattern = Pattern.compile("\\\"([a-zA-Z0-9]*)\\\":"); Matcher m = pattern.matcher(json); while (m.find()) { tags.add(m.group(1)); } for (int i = 0; i < tags.size(); i++) { json = json .replaceAll("\\\"" + tags.get
(i) + "\\\"", "^^" + tags.get(i) + "^^") .replaceAll(":\\\"", ":^^").replaceAll("\\\",", "^^,"); } json = json.replaceAll("\\\"}", "^^}").replaceAll("\\\"]", "^^]") .replaceAll("\"", "~~"); json = json.replace("^^"
, "\""); ObjectMapper mapper = new ObjectMapper(); try { Book book = mapper.readValue(json, Book.class); book.setName(book.getName().replace("~~", "\"")); System.out.println("作者:" + book.getAuthor() + "\n書名:" + book.getName()); } catch (IOException e) { e.printStackTrace(); } }

json–>List

    @Test
    public void test2() {
        String json = "[{\"id\":\"1\",\"name\":\"\"\"'夢\",\"price\":\"90\",\"author\":\"曹雪芹\"},{\"id\":\"2\",\"name\":\"西遊\"\"\",\"price\":\"45\",\"author\":\"wuche\"ngen\"}]";
        List<String> tags = new ArrayList<String>();
        Pattern pattern = Pattern.compile("\\\"([a-zA-Z0-9]*)\\\":");
        Matcher m = pattern.matcher(json);
        while (m.find()) {
            tags.add(m.group(1));
        }
        for (int i = 0; i < tags.size(); i++) {
            json = json
                    .replaceAll("\\\"" + tags.get(i) + "\\\"",
                            "^^" + tags.get(i) + "^^")
                    .replaceAll(":\\\"", ":^^").replaceAll("\\\",", "^^,");
        }
        json = json.replaceAll("\\\"}", "^^}").replaceAll("\"", "~~");
        json = json.replace("^^", "\"");
        ObjectMapper mapper = new ObjectMapper();

        try {
            List<Book> books = mapper.readValue(json,
                    new TypeReference<ArrayList<Book>>() {
                    });
            for (Book book : books) {
                book.setName(book.getName().replace("~~", "\""));
                book.setAuthor(book.getAuthor().replace("~~", "\""));
                System.out.println("作者:" + book.getAuthor() + "\n書名:"
                        + book.getName());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

這兩段關於json的處理基本是一致的。