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

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @   江南一点雨  阅读(769)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示