首页 > 解决方案 > 转义 JSON Python 3,烧瓶

问题描述

我有这个问题,我需要对 json 字符串进行转义。有&而不是&

从python字典我这样做;其中record_prev 是一个python 字典

record_prev = self.stringify(app)
record_prev = record_prev.decode('string_escape')
response    = make_response(
    record_prev,
    200
)
response.mimetype = "application/json"

字符串化函数:

def stringify(self, app=None):
    record_prev = copy.deepcopy( self.response )
    if app != None:
        app.logger.debug( record_prev["message_data"] )
    return json.dumps( record_prev )
#end def

我有一个问题record_prev = record_prev.decode('string_escape')

它抛出

AttributeError: 'str' object has no attribute 'decode'

标签: pythonjsonstringflask

解决方案


我认为 html 转义字符已经在字典中。出于这个原因,我有这个建议并使用werkzeug.utils.unescapeflask.jsonify

from flask import jsonify
from werkzeug.utils import unescape

def deep_unescape(data):
    if isinstance(data, str):
        return unescape(data)
    elif isinstance(data, (tuple, list)):
        return [deep_unescape(e) for e in data]
    elif isinstance(data, dict):
        return {deep_unescape(k):deep_unescape(v) for k,v in data.items()}
    else: 
        return data

data = {
    'key0&val': '<v0>', 
    'key1&val': ['<v1.1>', '<v1.2>'], 
    'key2&val': {
        'k0&v0': '<v0>', 
        'k1&v1': '<v1>', 
    }, 
    'intval': 102, 
    'floatval': 1.2344
}

response = jsonify(deep_unescape(data))

推荐阅读