You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Java中如何将字符串化JSON内容转换为JSON对象?

Java中将带HTML转义的JSON字符串转换为JSON对象的实现方法

你提供的字符串包含HTML转义字符"(对应双引号),且首尾包裹了单引号,需要先做预处理再进行JSON解析,以下是两种常用的实现方案:

方案一:使用Jackson实现(Java生态最常用的JSON库)

1. 引入依赖(Maven)

<!-- Jackson核心依赖 -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>
<!-- 用于HTML转义解码,可选,也可以手动替换转义字符 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.10.0</version>
</dependency>

2. 代码实现

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.text.StringEscapeUtils;
import java.util.List;

public class JsonParseDemo {
    public static void main(String[] args) throws Exception {
        // 原始字符串
        String rawStr = "'[\n" +
                "   {\n" +
                "      &quot;fruit&quot;:&quot;apple&quot;,\n" +
                "      &quot;color&quot;:&quot;green&quot;\n" +
                "   },\n" +
                "   {\n" +
                "      &quot;fruit&quot;:&quot;banana&quot;,\n" +
                "      &quot;color&quot;:&quot;yellow&quot;\n" +
                "   },\n" +
                "   {\n" +
                "      &quot;fruit&quot;:&quot;lime&quot;,\n" +
                "      &quot;color&quot;:&quot;green&quot;\n" +
                "   },\n" +
                "   {\n" +
                "      &quot;fruit&quot;:&quot;peach&quot;,\n" +
                "      &quot;color&quot;:&quot;pink&quot;\n" +
                "   }\n" +
                "]'";

        // 预处理1:去掉首尾的单引号
        String strWithoutQuote = rawStr.substring(1, rawStr.length() - 1);
        // 预处理2:解码HTML转义字符
        String decodedJsonStr = StringEscapeUtils.unescapeHtml4(strWithoutQuote);

        // 解析为JSON数组对象
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonArray = objectMapper.readTree(decodedJsonStr);
        // 也可以解析为自定义实体类集合
        // List<Fruit> fruitList = objectMapper.readValue(decodedJsonStr, new TypeReference<List<Fruit>>() {});

        // 测试输出
        System.out.println(jsonArray.get(0).get("fruit").asText()); // 输出apple
    }

    // 自定义实体类示例
    public static class Fruit {
        private String fruit;
        private String color;
        // 此处省略无参构造、getter、setter方法
    }
}

方案二:使用Fastjson实现(国内常用的高性能JSON库)

1. 引入依赖(Maven)

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.39</version>
</dependency>
<!-- 同方案一,HTML解码依赖,可选 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.10.0</version>
</dependency>

2. 代码实现

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import org.apache.commons.text.StringEscapeUtils;
import java.util.List;

public class JsonParseDemo {
    public static void main(String[] args) {
        String rawStr = "'[\n" +
                "   {\n" +
                "      &quot;fruit&quot;:&quot;apple&quot;,\n" +
                "      &quot;color&quot;:&quot;green&quot;\n" +
                "   },\n" +
                "   {\n" +
                "      &quot;fruit&quot;:&quot;banana&quot;,\n" +
                "      &quot;color&quot;:&quot;yellow&quot;\n" +
                "   },\n" +
                "   {\n" +
                "      &quot;fruit&quot;:&quot;lime&quot;,\n" +
                "      &quot;color&quot;:&quot;green&quot;\n" +
                "   },\n" +
                "   {\n" +
                "      &quot;fruit&quot;:&quot;peach&quot;,\n" +
                "      &quot;color&quot;:&quot;pink&quot;\n" +
                "   }\n" +
                "]'";

        // 预处理
        String strWithoutQuote = rawStr.substring(1, rawStr.length() - 1);
        // 不想引入commons-text的话可以直接替换:strWithoutQuote.replace("&quot;", "\"")
        String decodedJsonStr = StringEscapeUtils.unescapeHtml4(strWithoutQuote);

        // 解析为JSON数组
        JSONArray jsonArray = JSON.parseArray(decodedJsonStr);
        // 解析为List<Fruit>
        // List<Fruit> fruitList = JSON.parseArray(decodedJsonStr, Fruit.class);

        // 测试输出
        System.out.println(jsonArray.getJSONObject(0).getString("fruit")); // 输出apple
    }

    // 自定义实体类同方案一
    public static class Fruit {
        private String fruit;
        private String color;
    }
}

注意事项

  • 如果你的场景中仅存在&quot;这一种HTML转义字符,可以不用引入commons-text依赖,直接用str.replace("&quot;", "\"")替换即可,性能更好。
  • 一定要先去掉原始字符串首尾的单引号再解析,否则会触发JSON格式错误。

内容的提问来源于stack exchange,提问作者Malin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:27:04