相关文章推荐
飘逸的蘑菇  ·  浅谈SQL ...·  2 月前    · 
冲动的凉茶  ·  Unity - Manual: 2D ...·  5 月前    · 
豪爽的豌豆  ·  Fernando Botero - ...·  7 月前    · 

使用python删除json响应中的unicode字符串和空格

0 人关注

我正在向一个REST API发布数据,作为一个响应,我收到的数据是一个json响应。这个响应有一个unicode字符。 我尝试了很多方法来删除json数据中的unicode字符,但没有任何效果:(在删除unicode字符后,我正在验证模式。 以下是我的代码片段。

import json
import logging
from jsonschema import validate
if __name__ == '__main__':
    schema = {
        "$schema": "http://json-schema.org/draft-04/schema#",
        "type": "object",
        "properties": {
            "SOURCE": {
            "type": "string"
            "TIMESTAMP": {
            "type": "string"
            "TAGERRORS": {
            "type": "array",
            "items": [
                "type": "object",
                "properties": {
                    "TAGNAME": {
                     "type": "string"
                    "ERROR": {
                    "type": "string"
                "required": [
                    "TAGNAME",
                    "ERROR"
        "required": [
            "SOURCE",
            "TIMESTAMP",
            "TAGERRORS"
    response_dict ='"{\\u000d\\u000a  \\"SOURCE\\": \\"APPDEV\\",\\u000d\\u000a  \\"TIMESTAMP\\": \\"2022-04-19 12:29:27\\",\\u000d\\u000a  \\"TAGERRORS\\": []\\u000d\\u000a}"'
    response_dict = response_dict.replace("\\u000d\\u000a\\s*", "")
    print(response_dict)
    my_json = json.loads(response_dict)
    # validate(instance=my_json, schema=schema)
    # print(my_json)

替换代码1】不工作,并给出以下结果。
"{\u000d\u000a \"SOURCE\": \"APPDEV\",\u000d\u000a \"TIMESTAMP\": \"2022-04-19 12:29:27\",\u000d\u000a \"TAGERRORS\": []\u000d\u000a}"
另外,我试着用下面的regex来删除unicode字符,但在模式验证时失败了。

import re
def removeunicode(text):
    text = re.sub(r'\\[u]\S\S\S\S[s]', "", text)
    text = re.sub(r'\\[u]\S\S\S\S', "", text)
    return text
my_json = json.loads(removeunicode(response_dict))

请你帮助解决这个问题。谢谢。

3 个评论
所有字符都是Unicode字符...你是否只是想去掉回车和换行?
Maybe re.sub( r"\\u000d\\u000a\s*", "", response_dict) ?
str.replace 并不像你试图用 \s* 做的那样进行重码匹配。如果你需要,请使用 re.sub
python
json
python-3.x
unicode
Stark
Stark
发布于 2022-04-20
1 个回答
Mark Tolonen
Mark Tolonen
发布于 2022-04-20
已采纳
0 人赞同

它是双JSON编码的。 只要 json.loads 响应两次就可以解决,但如果你能解决上游的问题。

# From OP's example
>>> response_dict ='"{\\u000d\\u000a  \\"SOURCE\\": \\"APPDEV\\",\\u000d\\u000a  \\"TIMESTAMP\\": \\"2022-04-19 12:29:27\\",\\u000d\\u000a  \\"TAGERRORS\\": []\\u000d\\u000a}"'
>>> print(response_dict)  # This is valid JSON
"{\u000d\u000a  \"SOURCE\": \"APPDEV\",\u000d\u000a  \"TIMESTAMP\": \"2022-04-19 12:29:27\",\u000d\u000a  \"TAGERRORS\": []\u000d\u000a}"