Python解析filePython中行的JSON部分
我想请您帮助我进行json解析。我有一个文件,每一行看起来都像这样:Python解析filePython中行的JSON部分,python,json,Python,Json,我想请您帮助我进行json解析。我有一个文件,每一行看起来都像这样: some hexadecimal numbers|something else|int|UA info|{'computer': {'os': {'version': 'blabla', 'name': 'blabla'}, 'app': {'version': 'blabla', 'name': 'blabla'}}} 我有一个代码,可以将每一行分成几个部分: for line in some_file: line
some hexadecimal numbers|something else|int|UA info|{'computer': {'os': {'version': 'blabla', 'name': 'blabla'}, 'app': {'version': 'blabla', 'name': 'blabla'}}}
我有一个代码,可以将每一行分成几个部分:
for line in some_file:
line2 = line.split('|')
我想把每一行的最后一部分(至少我认为应该是json格式)解析出来供将来使用(我的意思是我想写(到另一个文件)os=name版本,app=name版本)。我试过这样的方法:
json_string = json.loads(line2[4])
但是python告诉我一些错误:
应为属性名称:第1行第2列(字符1)
或
无法解码任何JSON对象
我知道这很愚蠢,但我不知道该怎么办。。。
如有任何建议,我将不胜感激。JSON。这意味着您不能使用json
按原样加载它
我将使用解析管道分隔文件并将最后一列值安全加载到Python字典中:
import csv
from ast import literal_eval
with open("file.csv") as f:
reader = csv.reader(f, delimiter="|")
data = [literal_eval(line[-1]) for line in reader]
print(data) # data contains a list of dictionaries now
它不是JSON,但看起来像python文本 您可以使用转换为python对象:
import ast
ast.literal_eval(lines2[4])
顺便说一句,问题中缺少一个括号,因此:
ast.literal_eval(lines2[4] + '}')
JSON要求对任何字符串文本使用双引号 字符串是零个或多个Unicode字符的序列,用双引号括起来,使用反斜杠转义。- 一种简单且安全的解析方法是使用any。
YAML可以解析JSON,并且对语法要求不那么严格
>>> import yaml # from package pyyaml
>>> yaml.load("{'test': 'ok'}")
{'test': 'ok'}
>>> data = yaml.load("{'computer': {'os': {'version': 'blabla', 'name': 'blabla'}, 'app': {'version': 'blabla', 'name': 'blabla'}}}")
>>> data.get('computer').get('app').get('version')
'blabla'
对于管道分隔的数据,您可以像拆分一样拆分它们,或者使用csv
module进行拆分。另外,您可以将每个数据块传递给yaml.load
,它将处理转换:
import csv
import StringIO
some_file = StringIO.StringIO("0x1337|something else|12456789|UA info|{'computer': {'os': {'version': 'blabla', 'name': 'blabla'}, 'app': {'version': 'blabla', 'name': 'blabla'}}}")
elements = csv.reader(some_file, delimiter="|")
for element in elements[0]:
print(yaml.load(element))
输出:
4919还有别的事吗
12456789
UA信息
{'computer':{'app':{'version':'blabla','name':'blabla'},'os':{'version':'blabla','name':'blabla'}
那之后呢?如何访问各个部件?