无效字符串:控制字符 U+000A (LF) 必须转义为 \u000A

问题描述 投票:0回答:1

我开发了一个Python代码,将数据保存在BigQuery中。我的 BigQuery 表包含 JSON 类型的“详细信息”列。代码通常工作正常,但是当遇到包含 LF unicode 字符的数据时,它会给出错误(将数据保存到“详细信息”列时),如下 -

400 无效的 JSON 文字:解析值时出现语法错误 - 无效字符串:控制字符 U+000A (LF) 必须转义为 \u000A 或

我检查了其他unicode字符,只有遇到类似于换行符的unicode字符时才会出现问题,例如\u000A,\u000B,\u000C等

在保存到 BigQuery 之前,我尝试将数据编码为 utf-8 格式,但这也会出现错误 -

类型错误:字节类型的对象不可 JSON 序列化

我知道我可以手动将其中一些字符替换为特定的对应字符,例如 , 等等,但我正在寻找一种更强大的方法来做到这一点。不手动替换的另一个原因是传入数据可以包含任何新的 unicode 字符。有没有其他方法来处理和保存此类数据?

编辑:可重现的示例

some_text = chr(40960) + 'abcd' + chr(1972) + '\u000a' + u'aあä'
details = {'details_text': some_text}
details['other_key'] = 'other_val'
details = json.dumps(details)

然后我将此数据插入 BigQuery 表中

myquery = f"""INSERT INTO `database.mytable`
VALUES('value1', JSON '''{details}''', 'value2')"""
query_job = bq_client.query(myquery, location = location)
query_job.run()
python-3.x google-bigquery unicode
1个回答
0
投票

我遇到了同样的问题,问题是当有新行时' ',要解决这个问题,你必须输入 ' ' 创建以下代码来处理该字符类型并替换它

def translate_special_characters(text):
  return re.sub(r"(\"|\'|\n|\\n)", lambda m: {'"': r"\"", "'": r"\'", "\n": r"\\n", "\\n": r"\\n"}[m.group()], text)

您只需替换代码的以下部分:

details = translate_special_characters(json.dumps(details))
© www.soinside.com 2019 - 2024. All rights reserved.