【发布时间】:2016-02-27 18:03:12
【问题描述】:
这个问题让我摸不着头脑。我很确定我在相同的 json 序列化函数中输入了相同的值,但它在一个函数中有效,在另一个函数中无效。
我正在使用 Django。我的完整功能如下:
def lookup(request):
if request.method == 'POST':
print("Setting variable")
test1 = [{'artist_name': 'Toucan Sam', 'slug': '266697336'}, {'artist_name': 'Toucan Dad', 'slug': '131853573'}, {'artist_name': 'Toucan Bill', 'slug': '566827569'}]
print(test1)
print("serializing")
test2 = json.dumps(test1)
print(test2)
#POST goes here . is_ajax is must to capture ajax requests. Beginner's pit.
if request.is_ajax() and len(request.POST.get('searchItem')) > 3:
#Always use get on request.POST. Correct way of querying a QueryDict.
namestring = request.POST.get('searchItem')
print("Setting variable")
matches = ArtistAccount.objects.filter(artist_name__icontains=namestring).values('artist_name', 'slug')
if matches:
print(matches)
print("serializing")
data = json.dumps(matches)
print(data)
return HttpResponse(data, content_type="application/json")
我第一次运行它时没有打印函数和测试变量。 lookup() 会在 data 变量处中断,Django 会报告:
异常值:[{'artist_name': 'Toucan Sam', 'slug': '266697336'}, {'artist_name': 'Toucan Dad', 'slug': '131853573'}, {'artist_name': 'Toucan Bill', 'slug': '566827569'}] 不是 JSON 可序列化的
它报告它不是“JSON Serializable”!
所以我直接复制数据并粘贴到测试变量中。当我再次运行它时,测试变量序列化得很好并且打印得很好,但最终的数据变量没有序列化或打印。该功能在该尝试中中断,就像以前一样。下面是我的控制台输出:
Setting variable
[{'artist_name': 'Toucan Sam', 'slug': '266697336'}, {'artist_name': 'Toucan Dad', 'slug': '131853573'}, {'artist_name': 'Toucan Bill', 'slug': '566827569'}]
serializing
[{"artist_name": "Toucan Sam", "slug": "266697336"}, {"artist_name": "Toucan Dad", "slug": "131853573"}, {"artist_name": "Toucan Bill", "slug": "566827569"}]
Setting variable
[{'artist_name': 'Toucan Sam', 'slug': '266697336'}, {'artist_name': 'Toucan Dad', 'slug': '131853573'}, {'artist_name': 'Toucan Bill', 'slug': '566827569'}]
serializing
一切都被直接复制。看起来它应该工作!出了什么问题?
【问题讨论】:
-
看起来是时候学习使用调试器了。用
import pdb; pdb.set_trace()替换那些打印/测试行,你会在那里得到一个断点。 docs.python.org/3/library/pdb.html -
你自己搞糊涂了......你给你的东西匹配,这是一个模型类列表而不是字典列表......你只需要给 json 原始对象(即 ModelClass 不是原始类,但字符串字典是)
-
太棒了,@乔兰·比斯利。这回答了我的问题!谢谢!
标签: python json django serialization