序列化程序类确保写入数据库的数据为JSON格式:
sh_list = serializers.JSONField(binary=True)
数据在输出JSON中作为条目之一可见:
...
"sh_list": "\"[{'position': 1, 'item': 'Display'},
{'position': 3, 'item': 'Keyboard'},
{'position': 4, 'item': 'Headphones'}]\"",
...
我在views.py
中进行处理,试图将数据转换成字典:
sh_list = json.loads(serializer.data["sh_list"])
print('sh_list:', sh_list)
# sh_list: [{'position': 1, 'item': 'Display'}, {'position': 3, 'item': 'Keyboard'}, {'position': 4, 'item': 'Headphones'}]
print('sh_list type:', type(sh_list))
# sh_list type: <class 'str'>
print('serializer.data["sh_list"] type:', type(serializer.data["sh_list"]))
# serializer.data["sh_list"] type: <class 'bytes'>
sh_list2 = serializer.data["sh_list"].decode()
print('sh_list2:', sh_list2)
# sh_list2: "[{'position': 1, 'item': 'Display'}, {'position': 3, 'item': 'Keyboard'}, {'position': 4, 'item': 'Headphones'}]"
print('sh_list2 type:', type(sh_list2))
# sh_list2 type: <class 'str'>
sh_list3 = json.loads(sh_list2)
print('sh_list3[0]:', sh_list3[0])
# sh_list3[0]: [
print('sh_list3 type:', type(sh_list3))
# sh_list3 type: <class 'str'>
所需的输出对我来说像是
print('sh_list3[0]:', sh_list3[0])
# sh_list3[0]: {'position': 1, 'item': 'Display'}
如何进行从字节到字典的转换?
答案 0 :(得分:2)
sh_list = json.loads(serializer.data["sh_list"])
返回字典。
一个键“ sh_list”和一个字符串作为值
这个字符串是个问题,创建它的代码可能是错误的,或者不打算返回数据,可以将其解析为json字符串。
首先输入字符串
"\"[{'position': 1, 'item': 'Display'},
{'position': 3, 'item': 'Keyboard'},
{'position': 4, 'item': 'Headphones'}]\"
包含前导和尾随双引号。 但是,即使您删除了这些内容,其内容也包含单引号而不是双引号。 Json需要双引号。
因此您可以通过以下方式解决此特定情况
fixed_json = sh_list[1:-1].replace("'", '"')
aslist = json.load(fixed_json)
print(repr(aslist[0])
但这绝对不是健壮的代码。 如果可能的话,我建议从源头上解决问题,并更改生成这些“有趣”字符串的代码