【问题标题】:Parsing multiple json lists returned via ajax解析通过ajax返回的多个json列表
【发布时间】:2015-02-06 06:32:56
【问题描述】:

我通过 ajax 将两个对象作为 json 返回。现在我无法访问这两个列表中的值。早些时候我有一个列表,我能够轻松解析它。

data=serialize("json", vm_obj)
data2=serialize("json", user_networks_list)

data_dict["vm"] = vm_obj
data_dict["nt"] = user_networks_list

json = simplejson.dumps({'vm': data, 'nt': data2})
return HttpResponse(json, mimetype='application/javascript')

所以,我必须列出名称 nt 和 vm。我返回的 json 看起来像。

{"nt": "[{"pk": 1, "model": "network.defaultnetwork", "fields": {"endip": "100.16.10.255", "subnet": "100.16.10.0/24", "startip": "100.16.10.25", "port_group": "RoyalTech-803-pg", "is_default": 1, "eth_interface": "eth1", "dnsname": "royaltech.net", "user": 803, "dns": "172.16.10.1", "networkname": null, "gateway": "100.16.10.1"}}, {"pk": 241, "model": "network.defaultnetwork", "fields": {"endip": "100.168.5.254", "subnet": "100.168.5.0/24", "startip": "100.168.5.25", "port_group": "RoyalTech-803-pg1", "is_default": 0, "eth_interface": "eth2", "dnsname": "latest.local", "user": 803, "dns": "8.8.8.8", "networkname": "maxcheck", "gateway": "100.168.5.1"}}, {"pk": 2, "model": "network.defaultnetwork", "fields": {"endip": "10.250.0.254", "subnet": "10.250.0.0/24", "startip": "10.250.0.25", "port_group": null, "is_default": 0, "eth_interface": "eth3", "dnsname": "testing network", "user": 803, "dns": "100.0.0.0", "networkname": "Testing network", "gateway": "100.111.0.1"}}]", "vm": "[{"pk": 700, "model": "virtualmachine.virtualmachines", "fields": {"guest_full_name": "Windows_server_2008_R2_x86_64", "remoting": true, "vm_path_name": "/v/Roya-hd28_1.img", "user_type": null}}]"}

早些时候我有一个列表,我能够使用以下 javascript 循环访问数据。

for (var i = 0; i < data.length; i++)
 {
 visitors = data[i].pk;
 object = data[i]['fields'].name;
 }

任何想法现在 javascript 会是什么样子?

【问题讨论】:

  • 尝试将 mimetype 更改为 'application/json'

标签: javascript jquery ajax json django


【解决方案1】:

您正在对子字典中的 JSON 进行双重编码。您应该先序列化为 Python 字典,然后仅在最后将全部转储到 JSON:

data=serialize("python", vm_obj)
data2=serialize("python", user_networks_list)

data_dict["vm"] = vm_obj
data_dict["nt"] = user_networks_list

json = simplejson.dumps({'vm': data, 'nt': data2})

【讨论】:

    【解决方案2】:

    希望对你有帮助

    var vm = data.getAt('vm');
    var nt = data.getAt('nt');
    

    现在在 vm 和 nt 上运行之前使用的相同循环。

    谢谢

    【讨论】:

      【解决方案3】:

      现在您的新数据对象中有两个列表,因此您可以这样做:

      for (var i = 0; i < data.vm.length; i++) {
          visitors = data.vm[i].pk;
          object = data.vm[i]['fields'].name;
      }
      
      for (var j = 0; i < data.nt.length; j++) {
          visitors = data.nt[j].pk;
          object = data.nt[j]['fields'].name;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-28
        • 2016-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多