我将如何自定义python json.dumps以将字典列表值转换为str

时间:2018-10-17 19:57:28

标签: python json

所以我明白了:

In [5]: json.dumps({'dic':['a', 'b', 'c']})
Out[5]: '{"dic": ["a", "b", "c"]}'

是否有获取输出的方法:'{"dic": '["a", "b", "c"]'}' 基本上是str(list)?

仅在提供列表时有效:

In [2]: json.dumps(['a', 'b', 'c'])
Out[3]: '["a", "b", "c"]'

3 个答案:

答案 0 :(得分:2)

可以通过子类化json.JSONEncoder来定制json.dumps,但这是为了扩展可以序列化的类型。要更改已经受支持的类型(例如list)的序列化,您必须进行一些认真的monkeypatching。有关此解决方案,请参见以下建议的重复问题:How to change json encoding behaviour for serializable python object?

在这种情况下,我建议您在序列化之前直接将数据中的列表转换为字符串。可以使用以下功能完成此操作:

import json
def predump(data):
    if isinstance(data, dict):
        return {k: predump(v) for k, v in data.items()}
    if isinstance(data, list):
        return str(data)
    return data

print(json.dumps(predump({'dic':['a', 'b', 'c']})))

输出:

{"dic": "['a', 'b', 'c']"}

答案 1 :(得分:0)

import json

input_ = json.dumps({'dic':['a', 'b', 'c']})
output_ = json.loads(input_)

print(output_['dic'])

输出:['a', 'b', 'c']

答案 2 :(得分:0)

抱歉,您对此有误解。 JSON是数据的字符串表示形式。在python中,json.dumps将您的数据包装在字符串''

换句话说,它在下面的代码中不起作用。该列表未“字符串化”,只是封装在字符串''中。

In [2]: json.dumps(['a', 'b', 'c'])
Out[3]: '["a", "b", "c"]'

比较结果的一种更正确的方法是打印json.dumps(因为这是将数据装回时的解释方式。

您应进行比较(以上是印刷版本):

{"dic": ["a", "b", "c"]}  <--> ["a", "b", "c"]

摘要:您有一个正确编码的JSON。