gpt4 book ai didi

python - 使用 Python simplejson 返回预生成的 json

转载 作者:太空狗 更新时间:2023-10-30 00:58:03 25 4
gpt4 key购买 nike

我有一个我不想序列化为 json 的 GeoDjango 模型对象。在我看来,我是这样做的:

lat = float(request.GET.get('lat'))
lng = float(request.GET.get('lng'))
a = Authority.objects.get(area__contains=Point(lng, lat))
if a:
return HttpResponse(simplejson.dumps({'name': a.name,
'area': a.area.geojson,
'id': a.id}),
mimetype='application/json')

问题是 simplejson 将 a.area.geojson 视为一个简单的字符串,即使它是预先生成的漂亮的 json。这很容易通过 eval()'ing area-string 在客户端中修复,但我想正确地做到这一点。我可以告诉 simplejson 一个特定的字符串已经是 json 并且应该按原样使用(而不是作为简单字符串返回)吗?或者有其他解决方法吗?

更新澄清一下,这是当前返回的 json:

{
"id": 95,
"name": "Roskilde",
"area": "{ \"type\": \"MultiPolygon\", \"coordinates\": [ [ [ [ 12.078701, 55.649927 ], ... ] ] ] }"
}

挑战在于让“区域”成为一个 json 字典而不是一个简单的字符串。

最佳答案

我认为做到这一点的简洁方法是扩展 JSONEncoder,并创建一个编码器来检测给定对象是否已经是 JSON。如果是 - 它只是返回它。如果不是,则使用普通的 JSONEncoder 对其进行编码。

class SkipJSONEncoder(simplejson.JSONEncoder):
def default(self, obj):
if isinstance(obj, str) and (obj[0]=='{') and (obj[-1]=='}'):
return obj
return simplejson.JSONEncoder.default(self, obj)

在您看来,您使用:

simplejson.dumps(..., cls=SkipJSONEncoder)

如果您有更简洁的方法来测试某些内容是否已经是 JSON,使用它(我的方式 - 查找以“{”开头并以“}”结尾的字符串很丑陋)。

关于python - 使用 Python simplejson 返回预生成的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2027668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com