我有以下代码。这只是向我展示了一个用户而不是我在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')
我注册了两个不同的用户
使用此代码,我需要所有用户都显示在http://127.0.0.1:8000/panel/api中,但每次添加新用户时,都会显示在此处。
答案 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\\"}"}'