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

AWS Glue解析含表情符号的WhatsApp JSON文件失败求助

解决WhatsApp JSON表情符号转义导致AWS Glue解析失败的问题

问题根源

你遇到的是json.dumps生成了\U0001f90c这类Unicode转义序列文本(不是实际的Unicode字符),AWS Glue的JSON解析器无法正确识别这类转义,导致解析失败。之前的方案无效是因为:

  • 第一种替换操作是在替换实际的Unicode字符🤌,但字符串里存的是转义后的文本\U0001f90c(即由\、U、0001f90c这些字符组成的序列),自然匹配不到。
  • 第二种ensure_ascii=False参数是让json.dumps直接输出UTF-8字符而非转义,但如果后续又对输出的字符串做了二次转义(比如写入文件时用了默认ASCII编码),转义序列还是会出现。

可行解决方案

1. 生成JSON时直接输出原生表情符号(推荐)

避免生成转义序列的根本方法是在写入JSON文件时指定UTF-8编码,直接输出表情符号:

import json

# 直接写入文件,用utf-8编码确保表情符号不被转义
with open("whatsapp_contacts.json", "w", encoding="utf-8") as f:
    json.dump(contact_response_obj, f, ensure_ascii=False)

这样生成的JSON文件中会直接显示🤌这类表情符号,而非转义序列,AWS Glue可以正常解析。

2. 批量修复已生成的带转义序列的JSON字符串

如果已经有了包含\U0001f90c转义序列的JSON字符串,用正则表达式批量替换所有此类转义为实际字符:

import re

def resolve_unicode_escapes(raw_str):
    # 匹配所有\U开头的8位十六进制转义序列,转换为对应Unicode字符
    return re.sub(r'\\U([0-9a-fA-F]{8})', lambda match: chr(int(match.group(1), 16)), raw_str)

# 示例:修复带转义的字符串
string_data = 'LE JOOCHAR \\U0001f90c💪'
fixed_data = resolve_unicode_escapes(string_data)
# fixed_data 结果为 'LE JOOCHAR 🤌💪'

3. 在AWS Glue端直接处理转义序列

如果无法修改JSON生成流程,在Glue的Spark作业中用自定义UDF处理用户名列:

from pyspark.sql.functions import udf
from pyspark.sql.types import StringType
import re

@udf(StringType())
def fix_username_unicode(username):
    if not username:
        return username
    return re.sub(r'\\U([0-9a-fA-F]{8})', lambda m: chr(int(m.group(1), 16)), username)

# 读取JSON数据后应用UDF
df = spark.read.json("s3://your-bucket/path/contacts.json")
df = df.withColumn("fixed_username", fix_username_unicode(df["username"]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:26:23