【问题标题】:How to get objct information from Ajax response in JSON如何从 JSON 中的 Ajax 响应中获取对象信息
【发布时间】:2018-06-21 05:45:18
【问题描述】:

我正在开发一个需要解析 Ajax 响应的网站,它看起来像这样:

{"comments": "[{\"model\": \"modelhandler.comment\", \"pk\": 4, \"fields\": {\"user\": 2, \"description\": \"hello this is a comment but I don't know if it's working yet.......\", \"replyto\": null, \"uploaded\": \"2018-01-10T20:35:40.856Z\", \"updated\": \"2018-01-10T20:35:40.856Z\"}}]"}

我尝试从这个响应中获取数据,如下所示:

success: function (data) {
    var json = JSON.parse(JSON.stringify(data));
    $.each(json, function(key,value) {
        alert(value.comments);
    });
}

不过这提醒了我undefined

这里的 cmets 字段中有 1 条评论,但我可能有超过 1 条评论。我将如何从这样的 Json 响应中检索数据?

编辑:

我记录了data 对象,我得到了这个:

Object
comments
:
"[{"model": "modelhandler.comment", "pk": 4, "fields": {"user": 2, "description": "hello this is a comment but I din't know if it's working yet.......", "replyto": null, "uploaded": "2018-01-10T20:35:40.856Z", "updated": "2018-01-10T20:35:40.856Z"}}]"
__proto__
:
Object

在谷歌浏览器中使用 console.log()

json 也是由 django 视图生成的,如下所示:

def obtain_comments(request, *args, **kwargs):
    begin = int(request.GET['begin'])
    end = int(request.GET['end'])
    n_comments = end - begin
    all_split = Comment.objects.order_by('-uploaded')[:end]
    data = {
        'comments': serializers.serialize('json',all_split),
    }
    return JsonResponse(data)

【问题讨论】:

  • 我不明白这个:JSON.parse(JSON.stringify(...))。为什么要字符串化只是为了立即解析?
  • 删除stringify;用于将已经解析 JSON 的内容转换为字符串。你只想要JSON.parse(data)
  • 现在我删除了我得到的字符串:SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
  • 哎呀没注意到django标签@LouysPatriceBessette
  • @MuhammadOmerAslam:当然……我刚刚添加了它。 ;)

标签: javascript jquery json ajax django


【解决方案1】:

看起来您的响应是一个对象并且值是字符串化的。

试试

success: function (data) {
  var comments = JSON.parse(data.comments);
  // comments is an array now
  comments.forEach(function(comment) {
    console.log(comment.fields.description);
  });
}

如果您要在 Django 中序列化整个数据对象而不只是 cmets,那会更好。

【讨论】:

  • 这里的方式似乎可行,但我现在拥有像Object { model: "modelhandler.comment", pk: 4, fields: Object } 这样的每个数组元素,我将如何访问其中一个字段?
  • NVM 找到它:'console.log(json[0].fields.description)'
  • 试试console.log(comments[0].model);...它应该打印modelhandler.comment你现在有一个对象数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多