Python dict的JSON等价物是一个JSON对象。但是它的键必须是字符串,这是一个众所周知的限制。
我还需要支持布尔和数字键。我可以创建一个简单的Python值< - > JSON字符串一对一翻译:
False <--> "bool:False"
42 <--> "int:42"
"Foo" <--> "str:Foo"
但我想问一下是否有一些现有的建议或某种标准。只需要与之兼容的任何东西。
答案 0 :(得分:1)
JSON无法做到这一点,我不知道任何广泛使用的JSON扩展,允许您这样做。您必须自己编写序列化程序和反序列化程序,如果您继承json.JSONEncoder
和json.JSONDecoder
,这可能不会那么困难。
如果您能够切换协议,则有JSON-ish协议支持非字符串密钥。 MessagePack是一个:
case "POSTS_REQUEST_SUCCESS":
return {
...state,
areLoading: false,
items: action.data
}
答案 1 :(得分:0)
这可以达到你想要的效果:
>>> import json
>>> data = {False: 'this data', 42: 'answer', 'foo': 'bar'}
>>> json.dumps({"%s:%s" % (type(k).__name__, k): v for k, v in data.items()})
'{"int:42": "answer", "str:foo": "bar", "bool:False": "this data"}'
然后你必须反序列化它,它只适用于基本类型。
答案 2 :(得分:0)
由于您无法发布标准JSON,为什么不使用str
序列化和ast.literal_eval
(标准包)进行反序列化?
>>> d = {'a': 33, 23:(4,5), False: 10, 4: "foo"}
>>> a = str(d) # convert the python structure to a string
>>> d2 = ast.literal_eval(a)
>>> print(d2) # evaluate the a literal to a python structure
{False: 10, 4: 'foo', 'a': 33, 23: (4, 5)}
>>> d2 == d # are those the same before & after evaluation ?
True