Python 如何将键值列表添加到json dict
我的口述是:Python 如何将键值列表添加到json dict,python,json,dictionary,Python,Json,Dictionary,我的口述是: data = { 'key1': value1, 'key2': value2 } 现在,我如何附加存储在字符串中的键值列表,如 str0 = "key3:val3, key4:val4" or str = "{key3:val3, key4:val4}" 进入上面的json目录 print data.update(str) print data.update(ast.literal_eval(str)) 给出了错误 (还尝试了将引号添加到键)
data = {
'key1': value1,
'key2': value2
}
现在,我如何附加存储在字符串中的键值列表,如
str0 = "key3:val3, key4:val4"
or
str = "{key3:val3, key4:val4}"
进入上面的json目录
print data.update(str)
print data.update(ast.literal_eval(str))
给出了错误
(还尝试了将引号添加到键)
raise VALUERROR('格式错误的字符串')
str
不是格式良好的JSON字符串。如果您可以以str=“{'key3':'val3','key4':'val4'}”的格式生成JSON字符串
,它应该可以正常工作
>>> import ast
>>> data = {'key1': 'value1', 'key2': 'value2'}
>>> str = "{'key3':'val3', 'key4':'val4'}"
>>> data.update(ast.literal_eval(str))
>>> data
{'key3': 'val3', 'key2': 'value2', 'key1': 'value1', 'key4': 'val4'}
如果必须坚持原始格式,则必须编写所有者解析器,如中所述
这些不是格式良好的JSON字符串。“JSONDecodeError:需要用双引号括起来的属性名:”用双引号括起来的键名是什么样子的JSON字符串?请记住,您需要将外部引号更改为单引号
这段代码对我很有用:
import json
data = {
'key1': 5,
'key2': 3
}
str = '{"key3":3, "key4":2}'
foo = json.loads(str)
data.update(foo)
print(data)
>>> {'key3': 3, 'key2': 3, 'key4': 2, 'key1': 5}
基本上,您需要对字符串应用字符串操作,以将字符串输入转换为分析所需的形式 如果您的数据结构类似
str0 = "key3:val3, key4:val4"
然后采取这种方法
for item in str0,split(','):
key,value = item.split(':')
data[key] = value
str = str.replace("{","").replace("}","")
for item in str.split(","):
key, value = item.split(':')
data[key] = value
当您的输入字符串采用此格式时
str = "{key3:val3, key4:val4}"
采取这种方法
for item in str0,split(','):
key,value = item.split(':')
data[key] = value
str = str.replace("{","").replace("}","")
for item in str.split(","):
key, value = item.split(':')
data[key] = value
import json
import ast
data = {'key1': 'value1', 'key2':'value2'}
print json.dumps(data) #stdout: {"key2": "value2", "key1": "value1"}
data_after_ast = ast.literal_eval(json.dumps(data))
print type(data_after_ast) #stdout: <type 'dict'>
希望它能回答您的问题。由于这些字符串无效
json
字符串可能具有不同的结构,您必须解析这些字符串。要解析字符串,可以使用正则表达式。如果模式良好,那么它可以处理不同的字符串。例如:
import re
pat = re.compile(r'(\w+):(\w+)') # \w matches any alphanumeric character
str0 = "key3:val3, key4:val4"
str1 = "{key3:val3, key4:val4}"
print dict(re.findall(pat, str0))
print dict(re.findall(pat, str1))
这将为您提供以下输出:
{'key3': 'val3', 'key4': 'val4'}
{'key3': 'val3', 'key4': 'val4'}
您还可以使用dictionary的更新方法来更新数据
dictionary。像
data.update(dict(re.findall(pat, str0)))
你不能就这样“改变”一个变量。这就是他提供的数据这基本上可以归结为回答以下问题:。您已经获得了非JSON输入(如果您正确地呈现了它们,那么它们是JS对象文本,但是JS对象文本是JSON的超集;JSON需要引用属性名);Python的
json
模块无法处理这个问题。要解决解析问题,更新很简单。这个问题与JSON有什么关系?通常,如果你能找到一个合法的解析器,你就要使用它。发明你自己的是一个伟大的方式来处理格式错误的边缘案件。例如,在这种情况下,使用建议的demjson
模块可能是更安全的解决方案。JS对象文字符号(如csv和XML)并不是您想要为其使用自己的解析器的东西;有太多的方法让它出错。
data.update(dict(re.findall(pat, str0)))