【问题标题】:Django loading dictionary values into JSONDjango 将字典值加载到 JSON 中
【发布时间】:2015-07-07 18:33:35
【问题描述】:

我正在尝试从字典中获取值,并将它们加载到 JSON 中。我想我几乎可以使用下面的代码,但它只输出第一组值,我如何循环它以便输出所有组?

def storeliqour_view(request, store_id):
    objectdicts = {}
    objects = StoreLiquor.objects.filter(storeID=store_id)
    for i in range(len(objects)):
        objectdicts = model_to_dict(objects[i])
        objectdicts["storename"] = objects[i].storeID.StoreName
    data = [objectdicts.values()] 

    #define response
    response = {
        'aaData': data,
        'iTotalRecords': iTotalRecords,
        'iTotalDisplayRecords': iTotalDisplayRecords,
        'sEcho': request.GET['sEcho']
    }

    #serialize to json
    s = BytesIO()
    json.dump(response, s, cls=MainEncoder)
    s.seek(0)
    return HttpResponse(s.read())

现在它输出这个。如您所见,它只有一组: {"aaData": [[1, 0.0, 18, 96.6, 7032, false, 2610, "test store"]]}

如何让它输出多个,像这样?: {"aaData": [[1, 0.0, 18, 96.6, 7032, false, 2610, "test store"], [2, 0.0, 18, 96.6, 7032, true, 2610, "test store"]]}

【问题讨论】:

  • 你的 data = [objectdicts.values()] 不是 for 循环的一部分,所以它只运行一次。

标签: python json django dictionary


【解决方案1】:

你可以使用:

data = [
    model_to_dict(object).values() + [object.storeID.StoreName]
    for object in objects
]

如果只有字典以相同的顺序返回值,这将起作用。因此,执行以下操作会更安全:

data = []
if objects:
    keys = model_to_dict(objects[0]).keys()
    for object in objects:
        d = model_to_dict(object)
        data.append([d[key] for key in keys] + [object.storeID.StoreName])

【讨论】:

  • 是的,字段顺序还是随机的
  • 无论我使用什么代码,所有行的字段顺序都保持不变。但是它本身的字段顺序仍然不是它在模型中设置的方式。
  • 是的,实际上你是对的,设置字段顺序的能力非常有用,特别是用于排序目的。
【解决方案2】:
def storeliqour_view(request, store_id):
    objectdicts = {}
    objects = StoreLiquor.objects.filter(storeID=store_id)
    data = list()
    for i in range(len(objects)):
        objectdicts = model_to_dict(objects[i])
        objectdicts["storename"] = objects[i].storeID.StoreName
        data.append([objectdicts.values()]) 
    # rest of the code here...

【讨论】:

  • objectdicts.values() 周围的括号实际上是没有必要的。
  • 是的,你是对的,我以为你想要一个列表列表。 :)
猜你喜欢
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 2017-04-20
相关资源
最近更新 更多