将json dict值中的dict的字符串表示形式转换为dict

时间:2018-08-06 11:43:54

标签: python json dictionary

大家好,如果标题措辞不佳,则感到抱歉。我在解决如何解决遇到的这个问题时遇到了麻烦。我本来希望只将dict作为此键的值传递给json obj,但可悲的是,我必须将其作为字符串传递。所以,我有一个看起来像这样

的json dict对象

data = {"test": "Fuzz", "options": "'{'size':'Regular','connection':'unconnected'}'"}。显然,我希望第二个dict值不是字典的字符串表示形式,而是字典。最好的方法是只删除data [options]的倒数第二个和倒数第二个单引号,还是有更好的选择?

很抱歉造成任何混乱。这就是我执行

后json对象的外观

json.dump(data, <filename>)

可以将选项的值视为另一个变量x,它等于'{'size':'Regular','connection':'unconnected'}'

我可以做x [1:-1],但是我不确定这是否是最pythonic的做事方式。

2 个答案:

答案 0 :(得分:1)

import ast

bad_string_dict = "'{'size':'Regular','connection':'unconnected'}'"
good_string_dict = bad_string_dict.strip("'")
good_dict = ast.literal_eval(good_string_dict)
print(good_dict)

您将不得不删除引号,而没有其他方法

答案 1 :(得分:0)

鉴于OP的评论,我建议以下内容:

  1. 将环境变量设置为已知的数据格式(例如json / yaml / ...),而不是特定的语言(python)
  2. 使用json模块(或您选择的格式)加载数据

数据应如下所示:

raw_data = {"test": "Fuzz", "options": "{\"size\": \"Regular\", \"connection\": \"unconnected\"}"}

代码应如下所示:

raw_options = raw_data['options']
options = json.loads(raw_options)
data = {**raw_data, 'options': options}