我对这一点还是有点陌生,所以我可能不知道事物的所有常规术语:

Is it possible to preserve Python tuples when encoding with JSON? Right now json.loads(json.dumps(tuple)) gives me a list back. I don't want to convert my tuples to lists, but I want to use JSON. So, are there options?

原因是:

推荐答案

您可以编写高度特殊化的编码器和解码器挂钩:

import json

class MultiDimensionalArrayEncoder(json.JSONEncoder):
    def encode(self, obj):
        def hint_tuples(item):
            if isinstance(item, tuple):
                return {'__tuple__': True, 'items': item}
            if isinstance(item, list):
                return [hint_tuples(e) for e in item]
            if isinstance(item, dict):
                return {key: hint_tuples(value) for key, value in item.items()}
            else:
                return item

        return super(MultiDimensionalArrayEncoder, self).encode(hint_tuples(obj))

def hinted_tuple_hook(obj):
    if '__tuple__' in obj:
        return tuple(obj['items'])
    else:
        return obj


enc = MultiDimensionalArrayEncoder()
jsonstring =  enc.encode([1, 2, (3, 4), [5, 6, (7, 8)]])

print jsonstring

# [1, 2, {"items": [3, 4], "__tuple__": true}, [5, 6, {"items": [7, 8], "__tuple__": true}]]

print json.loads(jsonstring, object_hook=hinted_tuple_hook)

# [1, 2, (3, 4), [5, 6, (7, 8)]]

Json相关问答推荐

使用JSONata将具有相同键的字典合并

两种情况下过滤的JOLT规范

在Go中,当字段可以根据其他字段具有不同的类型时,什么是正确的方法来卸载JSON?

PowerShell脚本未按预期生成预期的JSON输出

在Vega中如何通过滑块改变条形图的宽度

来自json的可分析的构建报告

如何在 JSonPath 中按值查找列表中的所有元素

嵌套存储在字符串变量中的 JSON 对象

JSON 字段的多个名称

Oracle Apex - 将 JSON 对象分配给变量以返回

Rails 控制器无需编码即可渲染 json

N1QL 搜索对象内的某些对象

N1QL 聚合查询 Couchbase

JBuilder中未定义的局部变量或方法json

解析包含换行符的 JSON

谷歌浏览器不允许我放置断点

如何将 Swift 对象转换为字典

case 类只有一个字段时如何将json转为 case 类

类型是接口或抽象类,不能实例化

为什么 RestTemplate 不将响应表示绑定到 PagedResources?