从json字符串读取数据,并使用python对其进行操作
我有一个像这样的.json文件从json字符串读取数据,并使用python对其进行操作,python,json,Python,Json,我有一个像这样的.json文件 {"name":"george" , "age":28 , "gender":"male"} {"name":"maria" , "age":20 , "gender":"female"} {"name":"mike" , "age":22 , "gender":"male"} 我想用python读取文件,这样我可以得到每个值,这样我可以在以后的代码中操作它。 我尝试了以下代码: with open ("file.json" , "r") as f: data
{"name":"george" , "age":28 , "gender":"male"}
{"name":"maria" , "age":20 , "gender":"female"}
{"name":"mike" , "age":22 , "gender":"male"}
我想用python读取文件,这样我可以得到每个值,这样我可以在以后的代码中操作它。
我尝试了以下代码:
with open ("file.json" , "r") as f:
data = json.load(f)
for line in data:
print (line["name"])
但除非我像这样更改.json文件,否则它不会工作:
[
{"name":"george" , "age":28 , "gender":"male"},
{"name":"maria" , "age":20 , "gender":"female"},
{"name":"mike" , "age":22 , "gender":"male"}
]
如何在不更改.json文件的情况下执行该操作,或者如何使用regex操作该文件,以便运行上述代码获取每个值
非常感谢您抽出时间 假设每个字典都存储在新行中,您可以使用:
import json
with open ("file.json" , "r") as f:
data = [json.loads(val) for val in f.readlines()]
for line in data:
print (line["name"])
import json
with open ("file.json" , "r") as f:
data = []
opn = 0
cur = ''
for char in a.strip():
if char == '{':
opn += 1
elif char == '}':
opn -= 1
cur += char
if opn == 0:
data.append(json.loads(cur))
cur = ''
for line in data:
print (line["name"])
此外,如果字典未存储在不同的行中,则可以使用:
import json
with open ("file.json" , "r") as f:
data = [json.loads(val) for val in f.readlines()]
for line in data:
print (line["name"])
import json
with open ("file.json" , "r") as f:
data = []
opn = 0
cur = ''
for char in a.strip():
if char == '{':
opn += 1
elif char == '}':
opn -= 1
cur += char
if opn == 0:
data.append(json.loads(cur))
cur = ''
for line in data:
print (line["name"])
正如评论已经指出的,您的文件不是有效的json。 每一行都是自己的json对象,必须单独解析 以open(“file.json”,“r”)作为f的
:
data=[json.loads(line)表示f.readlines()中的行]
上面的代码使用a执行以下操作:
对于文件中的每一行,将行内容作为字符串读取,并使用json.loads()方法解析字符串。您拥有的文件不是有效的json,您需要尽一切努力将文件转换为有效的json,然后才能将其解析为json。对于包含多个项目的JSON数组,需要逗号和括号。我不会使用正则表达式来预处理JSON并修复它,除非你有大量这样的文件,或者你无法控制文件的格式。回答得很好。
{“foo”:{“bar”:1},}
将不是有效的json(不确定这是否会成为本例的问题)@Sayse-Oh-Yea你是对的,我在考虑字典。我会更新我的答案