处理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的处理基本是一致的。






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5083040.html,如需转载请自行联系原作者


上一篇:ADA 主网钱包linux安装(我们的世界在变化。我们可以一起改善它。)


下一篇:Jenkins Linux下安装、配置(学习笔记一)