浅谈json-1
1.起因
最近自己被毕设也是搞得焦头烂额,题目是“基于原型网络的小样本自然语言处理”,其中最让人头疼的便是数据处理,meta learning相关的fewshot数据,很大一部分都是json格式的,每个json都有上千条数据。自己之前接触的json格式非常少,就打算写一篇博文在学中总结。本文的目标事例:
将毕设中baseline需要将原本json格式数据处理成baseline模型可用的数据,所以就想写一个json处理python框架。
少样本 json格式语料(左),baseline格式(右)
2.什么是json
JSON (JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。——百度百科
数据传输是我们在敲代码时,经常遇到的一个场景,前后端交互。给数据一个统一的格式有利于我们编写和解析数据。
json,是一种数据格式,在与后端的数据交互中有较为广泛的应用。
参考博客链接
3.python的json处理语法
3.1 常用方法
方法 | 解释 |
---|---|
json.dumps | 将 Python 对象编码成 JSON 字符串 |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 |
3.2 json 读取方法
with open(json_path, 'r') as f:
for line in f.readlines():
json_data = json.loads(line)
4.自己的理解
json 其实在我用python时,发现复杂的json其实就是list与dict的混合组合,每个list中混有许许多多个dict,所以我的经验是层层剥开,通过对每一层的type进行判断,若是list类型遍历即可,若是dict则不停取其key值。
4.1 输入
4.2 代码如下:
import json #json
with open('snips_train_1.json', 'r',encoding='utf8') as dict:
data = json.load(dict)
print(type(data))
print(data.keys())
'''数据里一共有5个类'''
a= data['AddToPlaylist']
b= data['RateBook']
c= data['SearchScreeningEvent']
d= data['BookRestaurant']
e =data['SearchCreativeWork']
print(a[0]['support'].keys())
通过读取json,对json中的类别更加清晰。因为这是few shot 数据中的训练集,所以构成比较复杂,这里面还有support与query,seq_ins与seq_out作为键值。
所以该json构造是:dict(例如“AddToPlaylist”等5个类)->list->dict(support and query类)->dict(seq_ins)
我们要做的就是将外面的“皮”层层拨开,下面是我针对自己数据的“剥皮过程”,只拨开了第一个类的数据。
'''第一类'''
res = []
str = ''
for key in range(0,100): #我这份数据每个类中有100个项
#print(a[i]['support']['seq_ins'])
for j,x in enumerate(a[key]['support']['seq_ins']):#到这里会打印出每个类别所有个seq_in的词语
for nums in range(len(a[key]['support']['seq_ins'][j])):
str += a[key]['support']['seq_ins'][j][nums]+' '
res.append(str)
str = ''
for line in res:
print(line)
上述代码作用便是将最后的数据剥出来,并输出的pycharm终端。
4.3 输出
这样就非常顺利的将结果输出,我会将它复制到我的seq_in中作为输入跑baseline的precision与recall。想要直接输出文档也可以加一个write直接内容将输出到txt文件中。
这是第一篇博文,未来我也会把自己打造成一个小小技术博主!
欢迎大家在下面交流~