当前位置: 首页 > 知识库问答 >
问题:

在python中将dict转换为json时出错

施琦
2023-03-14

在python中使用哪个库将其转换为json?

编辑1:我的代码现在看起来像

import boto3
import json
rds_client = boto3.client('rds', 'ap-southeast-1')
db_instance_info = rds_client.describe_db_instances()
with open('result.json', 'w') as db:
    json.dump(db_instance_info, db)

它显示了这个错误

Traceback (most recent call last):
  File "list.py", line 14, in <module>
    json.dump(db_instance_info, db)
  File "/usr/lib/python2.7/json/__init__.py", line 189, in dump
    for chunk in iterable:
  File "/usr/lib/python2.7/json/encoder.py", line 434, in _iterencode
    for chunk in _iterencode_dict(o, _current_indent_level):
  File "/usr/lib/python2.7/json/encoder.py", line 408, in _iterencode_dict
    for chunk in chunks:
  File "/usr/lib/python2.7/json/encoder.py", line 332, in _iterencode_list
    for chunk in chunks:
  File "/usr/lib/python2.7/json/encoder.py", line 408, in _iterencode_dict
    for chunk in chunks:
  File "/usr/lib/python2.7/json/encoder.py", line 442, in _iterencode
    o = _default(o)
  File "/usr/lib/python2.7/json/encoder.py", line 184, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.datetime(2017, 6, 6, 9, 7, 33, 472000, tzinfo=tzutc()) is not JSON serializable

共有3个答案

高博涉
2023-03-14

你可以在python中使用json库

import json
x = {'s': True}
r = json.dumps(x)

这将给出一个json字符串

程树
2023-03-14

只需使用json模块:

import json
jsonarray = json.dumps(the_dict, ensure_ascii=False)

确保存在ascii位,以避免任何编码/解码错误。

慎志国
2023-03-14

错误是明确的:

TypeError: datetime.datetime(2017, 6, 6, 9, 7, 33, 472000, tzinfo=tzutc()) is not JSON serializable

默认情况下,json模块不能序列化任何来自datetime模块的类型,并且您的字典包含...,u'InstanceCreateTime':datetime.datetime(2017, 6, 6, 9, 7, 33, 472000,tzinfo=tzutc()),并且稍后的其他日期。

惯用的方法是定义一个自定义编码器来处理相关对象。覆盖默认方法、处理特定对象并将所有其他内容传递给基类方法就足够了:

class DateEncoder(json.JSONEncoder):
"""This encoder only use the default string convertion for the types
date, time and datetime of the datetime module"""
    def default(self, o):
        if (isinstance(o, datetime.date)
            or isinstance(o, datetime.datetime)
            or isinstance(o, datetime.time)):
            return str(o)                # specialize here the format...
        return json.JSONEncoder.default(self, o)

然后,您可以使用它构建json:

with open('result.json', 'w') as db:
    json.dump(db_instance_info, db, cls=DateEncoder)
 类似资料:
  • 问题内容: 我是使用subprocess.Popen()从进程的输出中获得的: 对我来说,它似乎不是有效的json。我已经使用和,但是没有运气。有人可以在正确的方向帮助我吗?提前致谢。 问题答案: 确实,导出ECMA脚本而不是JSON的旧版本。根据此debian错误报告,升级1.4.8应该会给您适当的JSON。另请参阅项目CHANGELOG: 现在,通过正确引用xport的键,xport的JSON

  • 问题内容: 我如何转换defaultdict 成为普通命令? 问题答案: 您可以简单地致电: 但请记住,defaultdict 是 一个dict: 只是稍有不同的行为,因为当您试图访问一个缺少关键-这通常会提高一个-在被称为改为: 这就是您在字典的数据端出现之前看到的内容。 因此,在不实际制作新对象的情况下恢复更多类似dict的行为的另一个技巧是重置: 但这在大多数情况下都不值得。

  • 我知道一个解决方案可能是将这个dict中的每个键值对转换为dict,这样整个结构就变成了dict的dict,然后我们可以将每一行单独添加到DataFrame中。但我想知道是否有更简单、更直接的方法来做到这一点。 到目前为止,我已经尝试将dict转换为series对象,但这似乎不能保持列之间的关系:

  • 问题内容: 我对Python中的JSON感到有些困惑。在我看来,这就像是一本字典,出于这个原因,我正在尝试这样做: 但是当我这样做时,它会给出一个错误。 如何将该字符串转换为结构,然后调用以获得“示例词汇表”? 问题答案:

  • 问题内容: 我在SO上看到许多问题,询问将XML转换为JSON的方法,但我对采用其他方法感兴趣。是否有用于将JSON转换为XML的python库? 编辑: 什么都没有马上回来,所以我继续写了一个脚本来解决这个问题。 Python已经允许您将JSON转换为本地dict(使用或在版本2.6以下的中,),因此我编写了一个库,可将本地dict 转换为XML字符串。 https://github.com/q

  • 问题内容: 我需要传递一个可以使用转换的对象。查询如下所示: 为了传递可以转换为json的HttpResponse对象,我从这里需要做什么? 问题答案: 好吧,如果您只是这样做: 你会得到一个数组数组… 另一种方法是使用: 这将为您提供一个带有索引的json对象… 如果那不是您想要的,那么您需要指定结果的显示方式…