如何用'枚举'迭代'dict'

时间:2018-01-16 07:22:58

标签: python json django django-rest-framework

我有以下代码。这只是向我展示了一个用户而不是我在JSON中的所有用户,而且我还有另外一个问题,当我连接我的字符串时它会在我输入'\ n'后显示“\”:

def get(self, request, format=None):
    users = Caseworker.objects.all()
    response = self.serializer(users, many=True)
    for j in range(0,len(response.data)):
     dictionary = response.data[j]
     myresponse = ""


    for i, (val, v) in enumerate(dictionary.items()):
         myresponse = myresponse + '{"text":' + '"' + v + '"' + '}' + ','
         print(myresponse)
    # for i,(k,v) in enumerate(dictionary.items()):
    #   myresponse = myresponse + '{"text":' + '"' + v + '"' + '}' + ','
    #   print(myresponse)

    return HttpResponse(json.dumps({'messages': myresponse}), content_type='application/json')

enter image description here

我注册了两个不同的用户

enter image description here

使用此代码,我需要所有用户都显示在http://127.0.0.1:8000/panel/api中,但每次添加新用户时,都会显示在此处。

在此图中是示例,我添加了一个新图像,是我可以想象的唯一用户。 enter image description here

1 个答案:

答案 0 :(得分:0)

问题是{'messages': myresponse}是一个字典,它有一个表示JSON *的字符串作为'messages'的值,这就是为什么你看到背后的斜杠转义"字符,因为它是 json字符串,而不是json对象。你应该完全在python对象的领域工作,然后在最后反序列化,不要混淆两者,因为你得到的正是你所要求的。代替:

myresponse = [{"text":v} for v in dictionary.values()]

*实际上,该字符串甚至不是json,但它看起来像是JSON对象的“元组”。

更明确地说,你会混淆以下两件事,你想要

>>> d = {"foo":"bar"}
>>> json.dumps({"messeges":d})
'{"messeges": {"foo": "bar"}}'

你在做什么:

>>> json.dumps({"messeges":'{"foo":"bar"}'}) # notice '{"foo":"bar"}' is a string
'{"messeges": "{\\"foo\\":\\"bar\\"}"}'