database_json = '{"from": ["the", "database"]}'
raw_json = '{"json": {"example": %s}}' % database_json
return HTTPResponse(raw_json, content_type='application/json')
如果您需要对json的“json”和“example”部分进行一些验证/灵活性,那么这就有点困难了,您必须制作一个自定义编码器并对字符串进行monkey-patch转义(因为它将转义双引号):
from contextlib import contextmanager
import json
class RawJSON(str):
def __init__(self, raw_json):
return super(RawJSON, self).__init__(raw_json)
class JSONEncoderWithRawSupport(json.JSONEncoder):
@contextmanager
def patched_encoder(self):
default_encoder = json.encoder.encode_basestring_ascii
def _encode(o):
if isinstance(o, RawJSON):
return o
return default_encoder(o)
json.encoder.encode_basestring_ascii = _encode
yield
json.encoder.encode_basestring_ascii = default_encoder
def iterencode(self, *args, **kwargs):
with self.patched_encoder():
return super(JSONEncoderWithRawSupport, self).iterencode(*args, **kwargs)
database_json = RawJSON('{"from": ["the", "database"]}')
my_dict = {"json": {"example": database_json}}
my_json = json.dumps(my_dict, cls=JSONEncoderWithRawSupport)
return HTTPResponse(my_json, content_type='application/json')