簡體   English   中英

使用 python 從 json 響應中刪除 unicode 字符串和空格

[英]Remove unicode string and spaces from json response using python

我將數據發布到 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)

response_dict = response_dict.replace("\ \ \\s*", "")不起作用並給出以下結果。
"{ \"SOURCE\": \"APPDEV\", \"TIMESTAMP\": \"2022-04-19 12:29:27\", \"TAGERRORS\": [] }"
另外,我嘗試了以下正則表達式來刪除 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))

你能幫忙解決這個問題嗎? 謝謝。

它是雙 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}"
>>> json.loads(response_dict)
'{\r\n  "SOURCE": "APPDEV",\r\n  "TIMESTAMP": "2022-04-19 12:29:27",\r\n  "TAGERRORS": []\r\n}'
>>> json.loads(json.loads(response_dict))
{'SOURCE': 'APPDEV', 'TIMESTAMP': '2022-04-19 12:29:27', 'TAGERRORS': []}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM