如果可能的话,如何将Python dict转换为JSON作为列表

前端之家收集整理的这篇文章主要介绍了如果可能的话,如何将Python dict转换为JSON作为列表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试使用json.dumps将我的Python对象序列化为JSON.如果使用json.dumps序列化dict,它显然会被序列化为JSON字典{..};如果序列化列表或元组,它将是一个JSON数组.

我想知道是否有任何方法可以轻松地将Python dict序列化为JSON列表,如果可能的话.如果可能的话,我的意思是如果键从0开始并按顺序排序,例如:

{0:'data',1:'data',2:'data}

以上将被序列化为JSON:'{“0”:“data”,“1”:“data”,“2”:“data”}’,但我希望它被序列化为[‘data’,’数据’,’数据’],因为键从0开始并按顺序排列.

我的理由是因为我有很多从PHP序列化的JSON数据,其中PHP数组中有键,如果键按照上面的顺序排序,PHP的json.encode使用数组,如果它们以任何其他方式键入,它们被序列化为JSON词典.我希望我的JSON序列化能够匹配我的PHP和Python代码.不幸的是,在我的情况下,更改PHP代码不是一个选项.

有什么建议?我找到的唯一解决方案是编写自己的函数来验证每个python字典,看看它是否可以在json.dumps之前首先转换为列表.

编辑:我正在序列化的这个对象可能是一个列表或一个字典,它可以在其中包含额外的dicts,列表等等(嵌套).我想知道是否有任何’简单’的方法可以做到这一点,否则我相信我自己可以写一个递归的解决方案.但是使用现有代码以避免更多错误总是更好.

最佳答案
我不知道没有递归的解决方案……虽然您可以从自定义编码器的编码方法内部调用转换器,但这只会增加不必要的复杂性.

In [1]: import json

In [2]: d = {"0": "data0","1": "data1","2": {"0": "data0","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","data2"]]'
原文链接:https://www.f2er.com/python/439516.html

猜你在找的Python相关文章