关于json文件处理的问题
正在做一个问答系统的实例,引入一个json文件,里面包括了问题和答案,已经改成了dict格式。然后我想将这个文件里的question和answer分别添加到两个新的列表,因为文件里的每个对应question和answer都在一个小字典里,文件不是纯小字典组成,开头有其他内容。然后想问一下大神们,我应该怎么操作呢?qList = []
aList = []
d = t_json
for i in t_json:
qList.append(i['question'])
aList.append(i['answers'])
print(qList)
print(aList)
这是我的代码,但是报错string indices must be integers 不太明白你的意图,如果不是纯小字典,开头有字符,那先转为字符格式,去掉开头,然后再转为字典,不就好了么?
要么你就把一部分数据放出来看看,可以调试下代码 把文件传上来 wp231957 发表于 2020-10-9 08:56
把文件传上来
{"version": "v2.0", "data": [{"title": "Beyonc\u00e9", "paragraphs": [{"qas": [{"question": "When did Beyonce start becoming popular?", "id": "56be85543aeaaa14008c9063", "answers": [{"text": "in the late 1990s", "answer_start": 269}], "is_impossible": false}, {"question": "What areas did Beyonce compete in when she was growing up?", "id": "56be85543aeaaa14008c9065", "answers": [{"text": "singing and dancing", "answer_start": 207}]
这是给定文件开头的一部分,后面的内容都是一样的。我现在想做的就是把这个文件里的所有question添加到我的qlist,然后把answer添加到我的alist。我想问一下应该怎么做? 疾风怪盗 发表于 2020-10-9 00:59
不太明白你的意图,如果不是纯小字典,开头有字符,那先转为字符格式,去掉开头,然后再转为字典,不就好了 ...
{"version": "v2.0", "data": [{"title": "Beyonc\u00e9", "paragraphs": [{"qas": [{"question": "When did Beyonce start becoming popular?", "id": "56be85543aeaaa14008c9063", "answers": [{"text": "in the late 1990s", "answer_start": 269}], "is_impossible": false}, {"question": "What areas did Beyonce compete in when she was growing up?", "id": "56be85543aeaaa14008c9065", "answers": [{"text": "singing and dancing", "answer_start": 207}]
这是给定文件开头的一部分,后面的内容都是一样的。我现在想做的就是把这个文件里的所有question添加到我的qlist,然后把answer添加到我的alist。我想问一下应该怎么做?
masterbo 发表于 2020-10-10 00:18
{"version": "v2.0", "data": [{"title": "Beyonc%u00e9", "paragraphs": [{"qas": [{"question": "When...
你不能这么给数据啊,给个开头,结尾的括号,都是靠一个一个对出来的。。。。。。。。你可以省略掉中间内容,但是结尾要有啊{:10_284:}
import json
# data里面"is_impossible": "false",貌似用逻辑值就报错了,应该都是字符或者数值
data = {"version": "v2.0",
"data": [{"title": "Beyonc\u00e9",
"paragraphs": [{"qas":
[
{"question": "When did Beyonce start becoming popular?",
"id": "56be85543aeaaa14008c9063",
"answers": [{"text": "in the late 1990s", "answer_start": 269}],
"is_impossible": "false"
},
{"question": "What areas did Beyonce compete in when she was growing up?",
"id": "56be85543aeaaa14008c9065",
"answers": [{"text": "singing and dancing", "answer_start": 207}],
}
]
}]
}]
}
data = str(data).replace('\'', '\"')# 要求全部为双引号
data = json.loads(str(data))# 抓换为json格式
# 保存json,查看结构
# with open('data1.json','w',encoding='utf-8') as f:
# f.write(json.dumps(data))
q_a_list = data['data']['paragraphs']['qas']
qlist = for i in q_a_list]
alist = for i in q_a_list]
print(qlist)
print(alist)
['When did Beyonce start becoming popular?', 'What areas did Beyonce compete in when she was growing up?']
[{'text': 'in the late 1990s', 'answer_start': 269}, {'text': 'singing and dancing', 'answer_start': 207}] 你可以给个你希望怎么输出的格式出来看看 疾风怪盗 发表于 2020-10-10 01:23
你不能这么给数据啊,给个开头,结尾的括号,都是靠一个一个对出来的。。。。。。。。你可以省略掉中间内 ...
谢谢大神。我第一次求助,刚开始学nlp,不知道怎么发数据。您可以讲一下,第27行代码是什么意思吗?我有点没看明白。 masterbo 发表于 2020-10-10 09:45
谢谢大神。我第一次求助,刚开始学nlp,不知道怎么发数据。您可以讲一下,第27行代码是什么意思吗?我有 ...
你是说26行吧,就是提取数据,逐层提取,就是列表和字典的提取一样 疾风怪盗 发表于 2020-10-10 10:12
你是说26行吧,就是提取数据,逐层提取,就是列表和字典的提取一样
那【0】代表什么意思呢? masterbo 发表于 2020-10-10 10:49
那【0】代表什么意思呢?
我还想问一下就是我发出来的只是一小段,还是列表的形式。我自己对这整个json文件应该怎么做处理呢? masterbo 发表于 2020-10-10 10:49
那【0】代表什么意思呢?
就是碰到列表的时候,取第一个元素。。。。。。。
我不知道你的场景是什么
一般我是爬虫时爬数据碰到,那就是像这样先loads数据,如果碰到数据无法转为json,一般是因为格式问题
前面多了点不相关的字符、引号不是双引号之类的,按需处理就好了
然后按照层级一层一层取值,直到想要的数据,
一般这时候的数据是列表里嵌套各个字典的样式,就可以循环获取了
你不清楚层级,就先dumps保存下数据,用pycharm打开,格式化,层次就很清楚了 疾风怪盗 发表于 2020-10-10 11:01
就是碰到列表的时候,取第一个元素。。。。。。。
我不知道你的场景是什么
with open('train-v2.0.json', 'r', encoding='utf-8') as f:
data = json.load(f)
print(data)
我想先打开然后打印这个文件,但是报错了,您能帮我看一下哪里错了吗?
File "C:/Users/lenovo/PycharmProjects/pythonProject3/main.py", line 36, in <module>
data = json.load(f)
File "C:\Users\lenovo\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 296, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "C:\Users\lenovo\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Users\lenovo\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\lenovo\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) masterbo 发表于 2020-10-10 11:09
with open('train-v2.0.json', 'r', encoding='utf-8') as f:
data = json.load(f)
print(data ...
加个好友 谢谢大家 疾风怪盗 发表于 2020-10-10 11:21
加个好友
我积分不够。。。等一下。。。
疾风怪盗 发表于 2020-10-10 11:21
加个好友
您能帮我解答一下吗?我现在积分不够,加不了好友。
masterbo 发表于 2020-10-10 11:30
您能帮我解答一下吗?我现在积分不够,加不了好友。
积分不够。。。。。。。。
加Q381671811
我没试过我也不知道
看你这问题提示,第一个字符就有问题,没看到数据也不清楚
页:
[1]