【问题标题】:Create JSON from an array of int从 int 数组创建 JSON
【发布时间】:2016-06-01 23:53:10
【问题描述】:

我有一个名为 ServiceSubCategory 的 django 模型,我想使用 Python 创建其主键值的 JSON 列表。

我试过这个:

idDic=[obj.as_json for obj in ServiceSubCategory.objects.values_list('id',flat=True)]

但是我收到了这个错误:

int 对象没有属性as_json

我这样做是因为稍后我将在此附加另一个 JSON。

那么我怎样才能从我的模型初级键中创建一个 JSON 呢?

更新

我试过了

id_json = json.dumps(ServiceSubCategory.objects.values_list('id',flat=True))

我收到一个新错误:

[1,2,3,4,5,6,7,8,9,10] 不是 JSON 可序列化的

这是回溯:

追溯:文件 “/usr/local/lib/python2.7/dist-packages/Django-1.7-py2.7.egg/django/core/handlers/base.py” 在 get_response 111. response = Wrapped_callback(request, *callback_args, **callback_kwargs) 服务中的文件“/var/www/html/salimi/salimi/views.py” 61. idDic=json.dumps(ServiceSubCategory.objects.values_list('id',flat=True)) 转储中的文件“/usr/lib/python2.7/json/init.py” 243.在encode中返回_default_encoder.encode(obj)文件“/usr/lib/python2.7/json/encoder.py” 207. chunks = self.iterencode(o, _one_shot=True) 文件 "/usr/lib/python2.7/json/encoder.py" 在 iterencode 270. 默认返回_iterencode(o, 0) 文件“/usr/lib/python2.7/json/encoder.py” 184. raise TypeError(repr(o) + " is not JSON serializable")

异常类型:TypeError at /service/1/ 异常值:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 不是 JSON 可序列化的

【问题讨论】:

    标签: python json django


    【解决方案1】:

    你可以简单地写下:

    import json
    
    id_json = json.dumps(list(ServiceSubCategory.objects.values_list('id',flat=True)))
    

    【讨论】:

    • 现在我收到了[1,2,3,4,5,6,7,8,9,10] is not JSON serializable
    【解决方案2】:

    更新

    看起来ServiceSubCategory.objects.values_list('id', flat=True) 可能会返回一个生成器。在这种情况下,您可以使用 list() 使用生成器:

    import json
    json.dumps(list(ServiceSubCategory.objects.values_list('id', flat=True)))
    

    这不就行了吗?

    import json
    json.dumps(ServiceSubCategory.objects.values_list('id', flat=True))
    

    由于ServiceSubCategory.objects.values_list 已经是一个列表,它可以直接转储到 JSON。无需使用列表推导。

    【讨论】:

    • 现在我收到了[1,2,3,4,5,6,7,8,9,10] is not JSON serializable
    • @AlexJolig:您能否发布该错误的回溯以及repr(ServiceSubCategory.objects.values_list) 的输出。另外,您是在查找 JSON 字符串列表,还是转换为 JSON 的列表(如此答案所尝试的那样)?
    • 使用回溯更新了答案,我想如果我将 JSON 值作为字符串获取会更好
    • @Selcuk:谢谢。如果您可以将其回滚到最近的编辑,那就太好了。
    • @mhawke 抱歉,当我回滚时,您的最后一次编辑不存在。一定是冲突。
    【解决方案3】:

    这应该可以解决问题:

    import json
    json.dumps(list(ServiceSubCategory.objects.values_list('id', flat=True)))
    

    values_list 返回一个 django.db.models.query.ValuesListQuerySet 的实例,它没有默认的 JSON 序列化程序(它只是一个 QuerySet,到目前为止还没有发出数据库请求)。但是,您可以将其转换为列表对象。

    import json
    values_list_object = ServiceSubCategory.objects.values_list('id', flat=True))
    list_object = list(values_list) # querying the database
    json.dumps(list_object)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 2013-01-29
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多