目录

如何将Json格式的数据写入数据库

如何将Json格式的数据写入数据库?

将Json格式的数据写入数据库
关于.Json的灵魂三问:是什么?为什么?怎么用?
1. 是什么?

JSON(JavaScript Object Notation)是一种 轻量级 的数据交换格式,它以易于阅读和编写的文本形式表示数据。JSON 格式由键值对组成,其中键是字符串,值可以是字符串、数字、布尔值、数组、对象(另一个 JSON 对象)或 null。

长这样:三国演义.json

[
    {
        "name": "刘备",
        "age": 40,
        "city": "河北",
        "number":2
    },
    {
        "name": "关羽",
        "age": 39,
        "city": "桃园",
        "number":3
    },
    {
        "name": "张飞",
        "age": 38,
        "city": "桃园",
        "number":4
    }
]
2. 为什么?

JSON 格式具有以下特点:

  1. 易于阅读和编写 :JSON 使用了简洁的文本格式,使得人们可以轻松地阅读和编写 JSON 数据。
  2. 数据结构简单 :JSON 数据结构非常简单,由键值对组成,每个键值对之间用逗号分隔,键和值之间用冒号分隔。
  3. 支持多种数据类型 :JSON 可以表示字符串、数字、布尔值、数组、对象和 null 等多种数据类型。
  4. 与编程语言无关 :JSON 是一种与编程语言无关的数据格式,几乎所有编程语言都支持解析和生成 JSON 格式的数据。
  5. 适用于网络传输 :由于 JSON 格式轻量级且易于解析,因此非常适用于网络传输,常用于在客户端和服务器之间传递数据。
  6. 可嵌套 :JSON 支持对象的嵌套,可以在对象中嵌套数组,也可以在数组中嵌套对象,从而构建复杂的数据结构

总的来说,JSON 格式是一种简单、灵活且易于使用的数据交换格式,被广泛应用于 Web 开发、API 接口设计、配置文件等领域。

3.怎么用?

1.首先要介绍三个函数:

import json
json.dump(x1,x2)#将Python对象序列化为JSON格式的数据,并将其写入文件中
json.loads(json_str)#将JSON格式的字符串解析为Python对象
json.load(x)#用于从文件对象中读取JSON数据并解析为 Python对象的函数

从上文也能看出来json.loads()与json.load()的区别在于:一个接收文件对象作为参数,一个接收字符串作为参数。

2.接下来讲讲返回值问题,是一个小细节:

json.loads(data) 函数会根据传入的 JSON 格式的字符串 data 的内容来决定返回的数据类型。如果 JSON 字符串表示一个 JSON 数组(用方括号 [] 包围的数据集合),则返回一个 Python 列表;如果 JSON 字符串表示一个 JSON 对象(用花括号 {} 包围的键值对集合),则返回一个 Python 字典。eg:

data_a = 
[
    {"name": "John", "age": 30},
    {"name": "Alice", "age": 25},
    {"name": "Bob", "age": 35}
]

data_b ={
"name": "John",
"age": 30,
"city": "New York"
}

https://i-blog.csdnimg.cn/blog_migrate/b6bfdbaeb6d339d57c1e929fab075095.png#pic_center

https://i-blog.csdnimg.cn/blog_migrate/81bca843822500dbc088d75c599b6693.png#pic_center

3.实战场景 1:现在你需要将本地.Json 格式的文件内容写入数据库,只有一个文件,文件长这样:data.json

[
{
"name": "孙悟空",
"age": 500,
"city": "五指山",
"number":2
},
{
"name": "唐僧",
"age": 25,
"city": "东土大唐",
"number":1
},
{
"name": "猪八戒",
"age": 499,
"city": "天宫",
"number":3
},
{
"name": "沙和尚",
"age": 498,
"city": "流沙河",
"number":4
},
{
"name": "白龙马",
"age": 15,
"city": "东海",
"number":5
}

]

数据库中应该长这样:

https://i-blog.csdnimg.cn/blog_migrate/29406e1b8060d39f6436c2118048e990.png#pic_center

附源码:

import json
import pymysql

def read_json_file(file_path):
with open(file_path, 'r',encoding='utf-8') as f:
data = json.load(f)
# print(data)
return data

def insert_into_db(data, dbname, pwd):
con = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password=pwd,
db=dbname,
charset='utf8'
)
cur = con.cursor()
for item in data:
name =item['name']
age = item['age']
city = item['city']
number = item['number']
try:
sql = 'insert into users(name,age,city,number ) values(%s,%s,%s,%s)'
cur.execute(sql,(name,age,city,number))
con.commit()
print(f'{name}新增成功')
except pymysql.err.IntegrityError as e:
print(f'{name} 新增数据失败:{e}')
cur.close()
con.close()

if **name** == '**main**':
data = read_json_file('data.json')
insert_into_db(data,'test','123456')
#sql 语句:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
age INT,
city VARCHAR(255),
number INT
);

4.实战场景 2:现在你需要将多个本地.Json 格式的文件内容写入数据库,文件名:data.json,data1…json…等等,应该如何实现呢?

附源码:

import os,pymysql,json

def read_all_files(path):
filename = os.listdir(path)
files_list = []
for file in filename:
if file.endswith('.json'):
files_list.append(os.path.join(path, file))
data = []
for file in files_list:
with open(file,'r',encoding='utf8') as f:
data.extend(json.load(f))
return data

def insert_into_db(data,db_name,pwd):

    con = pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        password=pwd,
        db=db_name,
        charset='utf8'
    )
    cur = con.cursor()
    for item in data:
        name = item['name']
        age = item['age']
        city = item['city']
        number = item['number']
        try:
            sql = "insert into users(name,age,city,number ) values(%s,%s,%s,%s)"
            cur.execute(sql,(name,age,city,number))
            con.commit()
            print(f'{name}新增成功!')
        except pymysql.err.IntegrityError as e:
            print(f'{name}新增失败,该{name}已存在')
    cur.close()
    con.close()

if **name** == '**main**':
data = read_all_files(r'D:\TextToSql')#替换成你的路文件所在目录
insert_into_db(data,'test','123456')

这些是 python Web 开发的基础,.json 文件在日常中用的特别多,所以一点要弄明白!在现实中.json 保存的数据也很复杂,再复杂也是一样的处理方法,明天更新一个复杂的.json 文件写入数据库,敬请期待!!!