输入数据:
val1 = '[{"EmpID":123456,"AnalystID": "8aa18b9c59XXXXXb20cc2534","173f48XXXXXX427f3f14516dd0"]}]'
预期输出:
val_op = {"EmpID":123456,"AnalystID": "8aa18b9c59XXXXXb20cc2534","173f48XXXXXX427f3f14516dd0"]}
type(val1)
是str
type(val_op)
是dict
(基本上,我只需要删除将Val1
定义为String的第一个和最后一个单引号)。
我尝试的方法:
>>> strlen = len(val1)
>>> payloadStr = val1[1:(strlen-1)]
'{"EmpID":123456,"AnalystID":
"8aa18b9c59XXXXXb20cc2534","173f48XXXXXX427f3f14516dd0"]}'
>>> import json
>>>json.loads(payloadsStr)
{'EmpID':123456,'AnalystID':
'8aa18b9c59XXXXXb20cc2534','173f48XXXXXX427f3f14516dd0']}
答案 0 :(得分:2)
您不必分别对待[]
,json.loads
可以处理json列表对象。
import json
payload = json.loads(val1)[0]
还请注意,您字符串中的列表值缺少左括号,应改为...
val1 = '[{"EmpID":123456,"AnalystID": ["8aa18b9c59XXXXXb20cc2534","173f48XXXXXX427f3f14516dd0"]}]'
# ^
由于您提到该字符串来自Web请求,因此这意味着提出该请求的人都将其json格式错误。
答案 1 :(得分:0)
澄清一下,这是一个字符串。您要从字符串中提取一个包含在列表中的字典。
与包含字典的简单列表相比,这更加困难。
您可以采取的一种方法是:
val1 = val1.str.split('[')[1].str.split(']')[0]
这应该除去括号,并返回一个包含1个索引的数组,该数组将您的字典包含在字符串中。
另一种更直接的方法是:
val1 = val1.replace('[','').replace(']','')
从那里
import json
json.loads(payloadsStr)
应该为您提供字典。
答案 2 :(得分:-1)
谢谢大家提供的所有解决方案。由于所需的输出需要用双引号引起,因此不能使用json.loads(val1)和dict(* eval(val1))。 我只是尝试替换原始字符串中的[],并在将Post Request作为数据有效载荷传递时,它工作正常。
strlen = len(val1)
payloadStr = val1 [1:(strlen-1)]
response = requests.request(“ POST”,url,verify = False,data = payloadsStr,headers = header)
response.text
得到输出。如有任何混淆,我们深表歉意。再次感谢