我正在尝试使用我的Python对象序列化为JSON json.dumps.如果序列化dict使用json.dumps它,显然会被序列化为JSON字典{..}; 如果序列化a list或a tuple,它将是一个JSON数组.
我想知道是否有任何方法可以轻松地将Python序列化为dictJSON list,如果可能的话.如果可能的话,我的意思是如果键从0开始并按顺序排序,例如:
{0:'data',1:'data',2:'data}
Run Code Online (Sandbox Code Playgroud)
上面将序列化为JSON为:'{"0": "data", "1": "data", "2": "data"}',但我希望它被序列化,['data','data','data']因为键从0开始并按顺序排列.
我的理由是因为我有许多从PHP序列化的JSON数据,其中PHP数组中有密钥,如果密钥按上述顺序排序,PHP json.encode使用数组,如果它们以任何其他方式键入,则它们被序列化作为JSON词典.我希望我的JSON序列化能够匹配我的PHP和Python代码.不幸的是,在我的情况下,更改PHP代码不是一个选项.
有什么建议?我找到的唯一解决方案是编写自己的函数来验证每个python字典并查看它是否可以先转换为list之前的字典json.dumps.
编辑:我正在序列化的这个对象可以是a list或a dict,它可以在其中包含额外的dicts,列表等等(嵌套).我想知道是否有任何'简单'的方法可以做到这一点,否则我相信我自己可以写一个递归的解决方案.但是使用现有代码以避免更多错误总是更好.
我不知道没有递归的解决方案...虽然您可以从encode自定义方法内部调用转换器Encoder,但它只会增加不必要的复杂性。
In [1]: import json
In [2]: d = {"0": "data0", "1": "data1", "2": {"0": "data0", "1": "data1", "2": "data2"}}
In [3]: def convert(obj):
...: if isinstance(obj, (list, tuple)):
...: return [convert(i) for i in obj]
...: elif isinstance(obj, dict):
...: _, values = zip(*sorted(obj.items()))
...: return convert(values)
...: return obj
In [4]: json.dumps(convert(d))
Out[4]: '["data0", "data1", ["data0", "data1", "data2"]]'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7541 次 |
| 最近记录: |