处理json中影响解析的多余引号

170 篇文章 58 订阅
2 篇文章 1 订阅

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值