如何使用 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 序列化将带有其他变量的对象发送回客户端?的主要内容,如果未能解决你的问题,请参考以下文章

JSON.ENCODE 将带有空格的变量拆分为多个变量

Java - 如何反序列化带有嵌套对象和列表的 JSON 数组? [复制]

如何将其转换为带有 JSON 序列化对象的 POST 调用

如何将带有子属性的 JSON 反序列化为 C# 中的 ONE 对象

如何将json数据发送到可序列化类

NSJSON序列化问题。发送到 api 的 JSON 对象不正确