当前位置: 首页 > 面试题库 >

json以元组为键序列化字典

狄冠宇
2023-03-14
问题内容

Python中是否有一种方法可以序列化使用元组作为键的字典:

a={(1,2):'a'}

只需使用json.dumps(a),就会产生:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/json/__init__.py", line 230, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python2.6/json/encoder.py", line 367, in encode
    chunks = list(self.iterencode(o))
  File "/usr/lib/python2.6/json/encoder.py", line 309, in _iterencode
    for chunk in self._iterencode_dict(o, markers):
  File "/usr/lib/python2.6/json/encoder.py", line 268, in _iterencode_dict
    raise TypeError("key {0!r} is not a string".format(key))
TypeError: key (1, 2) is not a string

问题答案:

您不能将其序列化为json,json对于什么算作dict键要比python灵活得多。

您可以将映射转换为键,值对的序列,如下所示:

>>> import json
>>> def remap_keys(mapping):
...     return [{'key':k, 'value': v} for k, v in mapping.iteritems()]
... 
>>> json.dumps(remap_keys({(1, 2): 'foo'}))
'[{"value": "foo", "key": [1, 2]}]'


 类似资料:
  • 我有一个类型的Java,我希望将其序列化为升序排序的JSON数组。 如果没有,我正在考虑为此目的为集合编写一个自定义序列化器--有没有更好的方法可以有人建议呢? 最终,目标是将唯一整数数组反序列化到“请求”POJO中的某种容器中。然后处理请求并将该输入字段传递到“响应”对象中的相应输出字段(未更改)。 我希望将数据以的形式存储在POJO中,以使所有用户满意(如果您试图将其存储为的子类型,那么POJ

  • 问题内容: 如果我做: 包含一个空对象,而不是iframe元素,为什么? 问题答案: JSON( JavaScript对象 表示法) 不是 为序列化DOM节点 而 设计的,您需要自己拉出所需的内容并将其写入对象,然后根据需要重新创建DOM节点。 实际上,Chrome甚至不执行您的代码:

  • 问题内容: 我正在客户端和Django服务器之间发送信息,并且我想对此使用JSON。我正在发送简单的信息-字符串列表。我尝试使用,但是当我这样做时, 看来这只能用于Django对象。如何序列化简单的Python对象? 问题答案: 你可以使用纯Python执行此操作:

  • 问题内容: 我在反序列化一些json数据,获取InvalidCastExceptions之类的问题。 谁能指出我正确的方向? 这是我要反序列化的json; [{“ OrderId”:0,“名称”:“摘要”,“ MaxLen”:“ 200”},{“ OrderId”:1,“名称”:“详细信息”,“ MaxLen”:“ 0”}] 这是我的代码; 问题答案: OrderId是json中的一个Int(请注

  • 问题内容: 我有以下用于序列化查询集的代码; 以下是我的 我需要序列化。但是它说无法序列化。因为列表由Django对象和字典组成。有任何想法吗 ? 问题答案: 并且不能很好地与Django对象配合使用。 Django的内置序列化器只能序列化由django对象填充的查询集: 在您的情况下,其中包含django对象和dict的混合。 一种选择是摆脱中的模型实例,并使用dict将其替换为: 希望有帮助。

  • 有没有一个Jackson注释允许将数组反序列化到我的POJO的特定字段中?我可以用自定义的反序列化器很容易地做到这一点,但我希望用类内联的方式来完成。 例如,我从Elasticsearch返回了以下JSON。 我的POJO如下: 我希望“排序”数组(在数组[0]中总是有一个long,在数组[1]中总是有一个String)被反序列化如下: 我发现了另一个问题,唯一的答案是自定义的反序列化器,如果可以