我有一个字符串:
a = '"{""key1"": ""val1"", ""key2"":""val2""}"'
在Python中将其转换为字典的最合适方法是什么?
普通json.loads(a)
无法解密此格式。
编辑:当我读取带有一个“类似于json的”列的CSV时,会创建此奇怪的JSON字符串。
我不知道json的这种格式。因此,您可以使用下一个功能:
import json
def load_weird_json(json_string):
a = json_string.replace('""','"')
a = a[1:len(a)-1]
return json.loads(a)
尝试
import json
a = '"{""key1"": ""val1"", ""key2"":"val2""}"'
a = a.replace('""','"').replace('}"',"}").replace('"{','{')
data = json.loads(a)
print(data)
输出
{'key1': 'val1', 'key2': 'val2'}
假设字符串来自CSV文件,请在将结果传递到csv
进行解码之前,先使用json
对其进行解码。
>>> import io, csv, json
>>> a = '"{""key1"": ""val1"", ""key2"":""val2""}"'
>>> csv_file_like = io.StringIO(a)
>>> reader = csv.reader(csv_file_like)
>>> result = list(reader)
>>> json.loads(result[0][0])
{'key1': 'val1', 'key2': 'val2'}
如果已经通过从CSV文件读取设置了a
,则这会简单一些;您可以跳过使用io
从a
创建类似文件的对象的操作,而直接在原始CSV文件上使用csv.reader
。
@ chepner的回答实际上向正确的方向发送了我。该字符串是从CSV加载的,我可以通过在此处使用spark 2.0 read csv with json的答案来有效地防止这种奇怪的JSON形成:即,添加转义字符'\"'
选项。
感谢您的回答-它们都可以工作:)