【问题标题】:JSON - Serializing Django object .values()JSON - 序列化 Django 对象 .values()
【发布时间】: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


【解决方案1】:

为了澄清,这是我需要更改以使其正常工作:

matches = list(ArtistAccount.objects.filter(artist_name__icontains=namestring).values('artist_name', 'slug'))

【讨论】:

    猜你喜欢
    • 2014-05-19
    • 2011-01-23
    • 2018-09-12
    • 2013-05-23
    • 2021-11-24
    • 2015-02-24
    • 2014-10-23
    • 2012-01-18
    • 2011-09-13
    相关资源
    最近更新 更多