如何使用 json 序列化将带有其他变量的对象发送回客户端?
Posted
技术标签:
【中文标题】如何使用 json 序列化将带有其他变量的对象发送回客户端?【英文标题】:How to send an object with other variables back to the client using json serialize? 【发布时间】:2019-11-27 12:36:50 【问题描述】:如何将字典a
添加到response
以及如何在ajax
获得two objects
?
查看
def abc(request):
cp = Cp.objects.get(id=1)
cp = serializers.serialize('json', [cp,])
cp = json.loads(cp)
a = 'a': 'a', 'b': 'b'
return HttpResponse(data)
js
$.ajax(
//
success: function(data)
)
【问题讨论】:
不应期望 ajax 返回多个对象。它应该返回一个对象或一组对象。 “一个数组”是一个***元素。返回"..stuff...,...stuff..."
是无效的 json,而不在解析它们之前将它们分开
return JsonResponse('cp': cp, 'a': a)
?
@Taplar:请不要使用***列表,这是一个已知的安全漏洞:blog.jeremiahgrossman.com/2006/01/… 这实际上是JsonResponse
拒绝序列化***列表的原因之一,除非您指定 safe=False
。
@WillemVanOnsem 返回 json 数组的安全问题到底是什么?
恶意软件可以做很多事情。这并不意味着你不应该使用逻辑。如果你有一个执行搜索的 api 端点,返回多个结果的逻辑方式是一个 json 数组。
【参考方案1】:
感谢@WillemVanOnsem 的帮助
观看次数
def abc(request):
cp = serializers.serialize('json', [cp,])
cp = json.loads(cp)
cp = json.dumps(cp)
other = 'rate': float(rate), 'eair': float(eair), 'overpayment': overpayment, 'total_payment': round(total_payment), 'monthly_payment':round(monthly_payment)
return JsonResponse('cp': cp, 'other': other)
js
$.ajax(
//
success: function(data)
var cp_json = JSON.parse(data.cp);
var other = data.other;
var credit_payment = cp_json[0].fields;
$('.rate').html(credit_payment.rate + '%')
)
【讨论】:
以上是关于如何使用 json 序列化将带有其他变量的对象发送回客户端?的主要内容,如果未能解决你的问题,请参考以下文章
Java - 如何反序列化带有嵌套对象和列表的 JSON 数组? [复制]