在 python/Django 中多次迭代 json 对象

Posted

技术标签:

【中文标题】在 python/Django 中多次迭代 json 对象【英文标题】:iterate json object multiple times in python/Django 【发布时间】:2013-02-26 01:34:57 【问题描述】:

我正在使用 jquery 循环遍历 json 对象...但是有些似乎不起作用...

这是我的代码,

$.ajax(
        type: "GET",  
        url: "/users/",  
     // data: "page="+pageNum,  
        async: false,  
        dataType: 'json',  
        success: function(data)  
//alert("OK AJAX");
           $("#search_btn").remove();
           $('#btnadduser').css('visibility','visible');

$.each(data, function() 
  $.each(this, function(k, v) 
    /// iterate through the objects
            $("#nbody").html("<tr style='background-color:#FFFFFF; font-size:14px;'>             <td>"+data.f.user4.first_name+"</td> <td>"+data.f.user4.last_name+"</td><td>"+data.f.user4.username+"</td> <td>"+data.f.user4.email+"</td> <td>"+data.f.user4.username+"</td> <td>");
              );
           );
        
    );

当我在终端打印 json 对象时,这是我得到的。

"f": 
     "user4": "username": "user4", "first_name": "Alex", "last_name": "kasina", "is_active": true, "email": "alexkasina@gmail.com",     
      "user5": "username": "user5", "first_name": "", "last_name": "", "is_active": false, "email": "", , "user2": "username":      "user2", "first_name": "", "last_name": "", "is_active": true, "email": "", 
      "user3": "username": "user3", "first_name": "", "last_name": "", "is_active": true, "email": "", 
      "user1": "username": "user1", "first_name": "", "last_name": "", "is_active": true, "email": "", 
      "lexx": "username": "lexx", "first_name": "", "last_name": "", "is_active": true, "email": "tas.ss@df.dc"

我想遍历每个用户设置他们的名字,姓氏,用户名,... 请帮忙?

观点

@login_required
def users(request):
    from django.core.serializers.json import DjangoJSONEncoder
    from django.forms.models import model_to_dict

    html = User.objects.all()
    f =                 # initialise the output
    username = 'username'  # one of the fields from myModel
    [f.update(x[username]: x) for x in [model_to_dict(y) for y in html]]
    result = simplejson.dumps("f" : f, cls=DjangoJSONEncoder)
    print result#To see the json object
return HttpResponse(result)  

【问题讨论】:

我们需要查看生成 JSON 对象的视图。 【参考方案1】:

views.py

@login_required
def users(request):
  from django.core.serializers.json import DjangoJSONEncoder
  from django.forms.models import model_to_dict

  html = User.objects.all()
  f = [model_to_dict(x) for x in html]
  return HttpResponse(simplejson.dumps(f), cls=DjangoJSONEncoder)

javascript

var user_list = JSON.parse(data);
for(var i=0; i<user_list.length; i++) 
  var user_name = user_list[i]['username'];
  var first_name = user_list[i]['first_name'];
  var last_name = user_list[i]['last_name'];
  // ...
  // do something with user_name, first_name and last_name...

【讨论】:

SyntaxError: JSON.parse: 意外字符 [Break On This Error] var user_list = JSON.parse(data)['f'];我知道数据已经被解析了。还有其他创建列表的方法吗? 我不确定,但我认为您不需要 views.py 中的 DjangoJSONEncoder。只要 result = simplejson.dumps("f" : f) 就可以了。 当我删除 DjangoJSONEncoder 时,这是错误,datetime.datetime(2013, 3, 4, 0, 30, 3, tzinfo=) 不是 JSON 可序列化的。由于模型中的日期时间字段。 还是同样的错误,SyntaxError: JSON.parse: unexpected character。从此***.com/questions/8524933/…,我看到数据已经被解析了。我不知道为什么你的 ans 中的字符串 'f' 不起作用。我用 $.each 来完成它。非常感谢。为支持点赞【参考方案2】:

成功了!

  $.each(data, function(index0, l) 

         $.each(l, function(index1, n) 

             /// iterate through the objects

             var first_name = n.first_name;
             var last_name = n.last_name;
             var surname = n.username;

             // do something with user_name, first_name and last_name... 

            $("#nbody").append("<tr> <td>"+ first_name +"</td> <td>"+ last_name +"</td><td>"+ username +"</td> </tr>");

              );
           );

【讨论】:

以上是关于在 python/Django 中多次迭代 json 对象的主要内容,如果未能解决你的问题,请参考以下文章

在具有多次迭代的 CodedUI 测试中,仅为最后一次迭代生成 UITestActionLog.html 文件

多次迭代内存不足

Python多处理,在循环中多次使用池在第一次迭代后卡住

如何多次重复代码并将每次迭代的输出存储在同一个数据帧中?

Python3 + django2.0 + apache2 + ubuntu14部署网站上线

遗传算法中比赛选择的多次迭代