【问题标题】:Can't Parse Client Side JSON Object Created with Python/Django无法解析使用 Python/Django 创建的客户端 JSON 对象
【发布时间】:2020-09-01 14:09:28
【问题描述】:

我使用 JSON 格式的 AJAX 将数据对象从 Python/Django 应用程序传递到前端。一切正常,除了我无法在 Javascript 中解析 JSON 对象一次。我一直不确定。我已经尝试了我能想到的所有方法,但我非常卡住,所以我想看看是否有人能够指出我希望是一个超级简单的疏忽!

Python/Django 的片段:

data = serializers.serialize('json', products)


  response = {'product_data': data,
              'product_count': product_count}
  return HttpResponse(json.dumps(response), content_type='application/json')

AJAX 回调片段:

.done(function(data){

  console.log(data.product_count)
  console.log(data.product_data)
  console.log(data.product_data["model"])
  console.log(data.product_data[0])
  console.log(data.product_data[0]["model"])

})

控制台日志响应片段:

>1
>[{"model": "seller.product", "pk": 11048, "fields": {"seller": 132, "width": 211, "height": 3, "length": 350, "weight": 18600, "price": 11077, "color_id": null, "po_number": null, "po_sub_number": null, "custom_order_id": null, "active_at": "2019-08-02T01:27:23.410Z", "deactive_at": null, "in_holding": false, "approved_at": "2019-08-04T15:34:08.318Z", "sold_at": "2020-02-07T20:07:54.675Z", "slug": "colored-beni-ourain-rug", "created_at": "2019-08-02T01:23:51.650Z", "updated_at": "2020-02-07T20:07:54.675Z", "assets": [3567, 3581, 3585, 3572, 3573, 3574, 3577, 3582, 3583, 3584, 3586, 3587, 3589, 3594, 3596], "colors": [1, 2, 3, 4, 12], "shipping_options": [1]}}]
> undefined
> [
> undefined

第一个控制台日志 1 是正确的,在第二行中我想要的数据都在那里。但是每当我尝试从中获取信息时,我只会得到 undefined 或 ] 并且我无法弄清楚。任何人都可以帮忙吗?谢谢!

【问题讨论】:

    标签: javascript python json django ajax


    【解决方案1】:

    使用 JSONResponse 而不是 HttpResponse。 这样你就不需要在两者之间处理任何事情了。

    return JSONResponse(products)
    

    :)

    "json.dumps" 就足够了,不需要再次调用序列化程序。

    【讨论】:

    • 单独的 JsonReponse 不起作用。但是使用 JsonResponse 添加了序列化程序。现在都在工作。谢谢!
    • 很高兴它成功了。 tho, all, json.dump, serializer 和 jsonresponse 对对象使用序列化。所以,idk 那里实际上为你改变了什么:D 似乎你有一个不能被标准序列化程序序列化并被转换两次的对象。如果没有实际模型,很难猜测发生了什么。 :)
    • 嘿 muzzletov,您(或其他任何人)可能想知道,模型中的问题是模型中有一个 QuerySet。通过使用以下帖子,我能够开发出更好的解决方案,我认为这是一个比我更好的问题:stackoverflow.com/questions/16790375/…
    【解决方案2】:

    您正在多次序列化数据,只需将products 放入response 而不对其进行序列化。

      response = {'product_data': products,
                  'product_count': product_count}
      return HttpResponse(json.dumps(response), content_type='application/json')
    

    【讨论】:

    • 感谢您的回答。这就是我最初拥有它的方式,但得到了以下回溯: TypeError: Object of type ProductQuerySet is not JSON serializable
    • 这很有趣,ProductQuerySet is not JSON serializable 但是serializers.serialize 可以序列化它...
    【解决方案3】:

    我相信你需要先JSON.parse(data.product_data)

    【讨论】:

    • 不幸的是,没有运气。解析只是返回空白数组。
    猜你喜欢
    • 2018-08-03
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2016-05-11
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多