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

Flink处理JSON字符串时=、&符号被转义为Unicode编码如何解决?

根因说明

该问题由Flink默认采用的Jackson JSON序列化框架的默认配置导致:Jackson默认开启了HTML敏感字符转义规则,会自动将=、&、<、>等特殊字符转义为Unicode编码,部分版本同时默认开启非ASCII字符转义,进一步加剧了该问题。

解决方案

场景1:使用Flink官方JsonSerializationSchema进行流数据序列化

构建序列化实例时新增Jackson配置即可:

JsonSerializationSchema<你的POJO类名> serializationSchema = JsonSerializationSchema
        .builder(你的POJO类名.class)
        .configure(objectMapper -> {
            // 关闭非ASCII字符转义
            objectMapper.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, false);
            // 关闭HTML敏感字符转义,避免=、&被转义
            objectMapper.disable(SerializationFeature.WRITE_ESCAPED_HTML_CHARS);
        })
        .build();

场景2:自定义逻辑中自行维护ObjectMapper实例

初始化ObjectMapper时直接添加对应配置:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

// 初始化全局ObjectMapper实例
ObjectMapper objectMapper = new ObjectMapper()
        .configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, false)
        .disable(SerializationFeature.WRITE_ESCAPED_HTML_CHARS);

在建表WITH参数中添加JSON格式配置即可:

CREATE TABLE 输出表名 (
  body STRING,
  -- 其余字段定义
) WITH (
  'connector' = '你的输出连接器',
  'format' = 'json',
  'json.escape-non-ascii' = 'false',
  'json.disable-html-escaping' = 'true'
);

配置完成后重新提交作业,输出的JSON字符串就会保留原始的=、&符号,不会再被转义为Unicode编码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 00:06:04