浅谈json-1

浅谈json-1

1.起因

最近自己被毕设也是搞得焦头烂额,题目是“基于原型网络的小样本自然语言处理”,其中最让人头疼的便是数据处理,meta learning相关的fewshot数据,很大一部分都是json格式的,每个json都有上千条数据。自己之前接触的json格式非常少,就打算写一篇博文在学中总结。本文的目标事例:

将毕设中baseline需要将原本json格式数据处理成baseline模型可用的数据,所以就想写一个json处理python框架。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Voy0pvUu-1616832683116)(img/json/1.jpg)]

少样本 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文件中。

这是第一篇博文,未来我也会把自己打造成一个小小技术博主!
欢迎大家在下面交流~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
form-data转json的方法可以使用JavaScript中的FormData对象和serializeArray()方法来实现。首先,我们可以使用FormData对象来获取表单中的所有数据,然后使用serializeArray()方法将FormData对象转换为一个包含键值对的数组。接下来,我们可以遍历这个数组,将每个键值对转换为一个JSON对象。在转换过程中,我们可以根据需要对值进行自定义处理,比如将空值转换为null。最后,将所有的JSON对象组合成一个对象数组并返回。 以下是一个示例代码,用于将form-data转换为JSON对象数组: ```javascript function transformToJson(form) { var jsonData = {}; var formData = new FormData(form); var formArray = $(form).serializeArray(); $.each(formArray, function() { var dataType = $("select\[name='" + this.name + "'\]").attr("data-type"); var value = this.value; if (value == "无" || value == "") { value = null; } if (jsonData\[this.name\]) { if (!jsonData\[this.name\].push) { jsonData\[this.name\] = \[jsonData\[this.name\]\]; } jsonData\[this.name\].push(value || ''); } else { if (dataType == 'array') { jsonData\[this.name\] = \[\]; jsonData\[this.name\].push(value || ''); } else { jsonData\[this.name\] = value || ''; } } }); return jsonData; } ``` 这个函数接受一个表单作为参数,并返回一个转换后的JSON对象数组。你可以将表单元素传递给这个函数,然后使用返回的JSON对象数组进行后续操作。 引用\[1\]中提到了form-data的两种格式:multipart/form-data和x-www-form-urlencoded。这个函数适用于x-www-form-urlencoded格式的form-data转换为JSON对象数组。如果你需要处理multipart/form-data格式的form-data,你可能需要使用其他方法来解析和处理这种格式的数据。 希望这个回答对你有帮助!\[1\]\[2\] #### 引用[.reference_title] - *1* *3* [浅谈 JSON 对象和 FormData 相互转换,打通前端与后端的通信血脉](https://blog.csdn.net/Shids_/article/details/128931933)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [表单数据转换为JSON对象 3种方法](https://blog.csdn.net/weixin_60664977/article/details/124453249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值