如何使用Python对Json数据做增删改查排序操作

如何使用Python对Json数据做增删改查排序操作

我一直认为GUI界面对用户更加友好,所以用pysimplegui简单做了一下界面,如下图:

Python创建图形用户界面(GUI graphical user interface),推荐PySimpleGUI。

理由:我们很多时候只是想有个界面罢了,并不太在乎美观程度,也不希望花太多时间去专门学习一个 GUI 库,因为我们有太多需要学习的了。那么 PySimpleGUI 是非常好的选择。

安装方法:pip install pysimplegui 或者 pip3 install pysimplegui

程序基本实现了对json格式数据的增加,删除,修改,查找,排序等常用操作。

import PySimpleGUI as sg
import os
import json

root = os.getcwd()
path = os.path.join(root,'countries_config.json')

list_default = [{"id":"NONE","country_name":"NONE"}]
dire_default = {"id":"NONE","country_name":"NONE"}

sg.theme('Reddit') # DarkAmber BlueMono

#-------------------------------------------------------------
#   layout
#-------------------------------------------------------------
layout = [
    [sg.Text('ID',size=(5,1)),sg.InputText(key='-ID-',size=(37,1))],
    [sg.Text('NAME',size=(5,1)),sg.InputText(key='-NAME-',size=(37,1))],
    [sg.Button('增加',size=(40,1))],
    [sg.Button('删除',size=(40,1))],
    [sg.Button('修改',size=(40,1))],
    [sg.Button('查找',size=(40,1))],
    [sg.Button('显示',size=(40,1))],
    [sg.Button('排序',size=(40,1))],
    [sg.Button('清屏',size=(40,1))],
    [sg.Exit(  '退出',size=(40,1))]]

#-------------------------------------------------------------
#   window title
#-------------------------------------------------------------
window = sg.Window('JSON格式数据增删改查排序测试', layout)

def find(path,index):
    if os.access(path,os.F_OK):
        with open(path,'r',encoding='utf-8') as load_f:
            load_dict = json.load(load_f)
            for i in load_dict:
                if index == i["id"]:
                    print('序号:',i["id"],'  名称:',i["country_name"])
    else:
        print('未找到文件')

def delete(path,index):
    if os.access(path,os.F_OK):
        with open(path,'r',encoding='utf-8') as load_f:
            load_dict = json.load(load_f)
            for i in load_dict:
                if index == i["id"]:
                    load_dict.remove(i)
        with open(path,'w',encoding='utf-8') as dump_f:
            json.dump(load_dict,dump_f,ensure_ascii=False)
    else:
        print('未找到文件')

def modify(path,index,b):
    if os.access(path,os.F_OK):
        with open(path,'r',encoding='utf-8') as load_f:
            load_dict = json.load(load_f)
            for i in load_dict:
                if index == i["id"]:
                    i["country_name"]=b
        with open(path,'w',encoding='utf-8') as dump_f:
            json.dump(load_dict,dump_f,ensure_ascii=False)
    else:
        print('未找到文件')
        
def add(path,a,b):
    if os.access(path,os.F_OK):
        with open(path,'r',encoding='utf-8') as load_f:
            load_dict = json.load(load_f)

        with open(path,'w',encoding='utf-8') as dump_f:
            dire_default["id"]=a
            dire_default["country_name"]=b
            load_dict.append(dire_default)
            json.dump(load_dict,dump_f,ensure_ascii=False)
    else:
        with open(path,'w+',encoding='utf-8') as dump_f:
            list_default[0]["id"]=a
            list_default[0]["country_name"]=b
            json.dump(list_default,dump_f,ensure_ascii=False)
        
def show():
    if os.access(path,os.F_OK):
        with open(path,'r',encoding='utf-8') as load_f:
            load_dict = json.load(load_f)
            #print("load_dict = json.load(load_f)->load_dict type =",type(load_dict))
            for var in load_dict:
                print(var)
    else:
        print('未找到文件')
        
def sort():
    if os.access(path,os.F_OK):
        with open(path,'r',encoding='utf-8') as load_f:
            load_dict = json.load(load_f)
            load_dict_sorted=sorted(load_dict,key=lambda x:x ['id'])
        with open(path,'w',encoding='utf-8') as dump_f:
            json.dump(load_dict_sorted,dump_f,ensure_ascii=False)
    else:
        print('未找到文件')
#-------------------------------------------------------------
#   main
#-------------------------------------------------------------
while True: # The Event Loop
    event, values = window.read()
    
    if event == sg.WIN_CLOSED or event == '退出':
        break
        
    if event == '增加':
        add(path,int(values['-ID-']),values['-NAME-'])
    if event == '删除':
        delete(path,int(values['-ID-']))
    if event == '修改':
        modify(path,int(values['-ID-']),values['-NAME-'])
    if event == '查找':
        find(path,int(values['-ID-']))
    if event == '显示':
        show()
    if event == '排序':
        sort()
    if event == '清屏':
        os.system("cls")

window.close()

实际显示效果:

简单做下归纳:

1.文件路径拼接函数    
root = os.getcwd()    //当前路径
path = os.path.join(root,'countries_config.json')    //json文件路径
os.path.join()函数可以拼接路径,很方便    

2.打开文件时可以先判断文件是否存在    
if os.access(path,os.F_OK):    
用来判断文件是否存在,path是文件路径(包含文件名)    

3.打开JSON格式数据    
with open(path,'r',encoding='utf-8') as load_f:    
    load_dict = json.load(load_f)
json.load()用于从json文件中读取数据,读取出的数据是什么类型可以打印出来    
打印:print("load_dict = json.load(load_f)->load_dict type =",type(load_dict))    
结果:load_dict = json.load(load_f)->load_dict type = <class 'list'>

其实json.load()读取的数据可以是列表,也可以是字典,这取决于json文件内容

4.写入JSON格式数据    
with open(path,'w',encoding='utf-8') as dump_f:    
     json.dump(load_dict,dump_f,ensure_ascii=False)
json.dump()用于将dict类型的数据转成str,并写入到json文件中。另一种方法是使用json.dumps()将json数据转换成字符串再调用write()方法来写入文件。
为避免中文乱码等问题,请在打开文件时加上encoding='utf-8',写入JSON数据时加上ensure_ascii=False 。 
    
5.Json模块有dumps、loads、dump、load等四个函数介绍    
(1).json.dumps()用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数。    
(2).json.loads()用于将str类型的数据转成dict。    
(3).json.dump()用于将dict类型的数据转成str,并写入到json文件中。    
(4).json.load()用于从json文件中读取数据。    

6.json数据排序实际就是对列表进行排序,直接调用现有方法即可。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,可以使用json模块来操作JSON数据格式。以下是一些基本的JSON操作: 1. 将Python对象转换为JSON格式: ```python import json # 定义一个Python字典 person = {'name': 'Tom', 'age': 20, 'gender': 'male'} # 将字典转换为JSON格式 person_json = json.dumps(person) print(person_json) # 输出结果:{"name": "Tom", "age": 20, "gender": "male"} ``` 2. 将JSON格式字符串转换为Python对象: ```python import json # 定义一个JSON格式字符串 person_json = '{"name": "Tom", "age": 20, "gender": "male"}' # 将JSON格式字符串转换为Python对象 person = json.loads(person_json) print(person) # 输出结果:{'name': 'Tom', 'age': 20, 'gender': 'male'} ``` 3. 从JSON文件中读取数据: ```python import json # 读取JSON文件中的数据 with open('data.json', 'r') as f: data = json.load(f) print(data) ``` 4. 将数据写入JSON文件: ```python import json # 定义一个Python字典 person = {'name': 'Tom', 'age': 20, 'gender': 'male'} # 将Python字典写入JSON文件 with open('data.json', 'w') as f: json.dump(person, f) ``` 5. 修改JSON数据: ```python import json # 读取JSON文件中的数据 with open('data.json', 'r') as f: data = json.load(f) # 修改数据 data['age'] = 21 # 将修改后的数据重新写入JSON文件 with open('data.json', 'w') as f: json.dump(data, f) ``` 6. 删除JSON数据: ```python import json # 读取JSON文件中的数据 with open('data.json', 'r') as f: data = json.load(f) # 删除数据 del data['gender'] # 将修改后的数据重新写入JSON文件 with open('data.json', 'w') as f: json.dump(data, f) ``` 以上就是一些基本的JSON操作,可以根据具体需求进行扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值