如何将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"
}

在这里插入图片描述
在这里插入图片描述

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
    }

]

数据库中应该长这样:
在这里插入图片描述
附源码:

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文件写入数据库,敬请期待!!!

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在.NET中将JSON数组数据写入数据库,可以按照以下步骤进行操作: 1. 解析JSON数据:首先,需要使用JSON库(如Newtonsoft.Json)来解析JSON数组数据。可以使用`JsonConvert.DeserializeObject`方法将JSON字符串转换为.NET对象,或者使用`JArray.Parse`将JSON数组解析为JArray对象。 2. 连接数据库:接下来,需要建立与数据库的连接。可以使用.NET提供的数据访问技术(如ADO.NET)来连接到目标数据库。根据具体的数据库类型,可以选择使用合适的连接器或驱动程序。 3. 遍历JSON数组并插入数据库:通过遍历JSON数组,可以获取数组中每个元素的数据,并将其插入数据库。可以使用SQL语句或ORM框架(如Entity Framework)来执行插入操作。 4. 关闭数据库连接:在插入完所有数据后,应该关闭数据库连接,以释放资源和确保数据的一致性。 下面是一个简单示例,演示如何将JSON数组数据写入数据库(以使用SQLite数据库为例): ```csharp using System; using System.Data.SQLite; using Newtonsoft.Json; using Newtonsoft.Json.Linq; // 解析JSON数组数据 string jsonData = "[{\"name\":\"John\",\"age\":30},{\"name\":\"Jane\",\"age\":25}]"; JArray jsonArray = JArray.Parse(jsonData); // 连接到SQLite数据库 using (SQLiteConnection connection = new SQLiteConnection("Data Source=mydatabase.db;Version=3;")) { connection.Open(); // 遍历JSON数组并插入数据库 foreach (JObject item in jsonArray) { string name = item["name"].ToString(); int age = Convert.ToInt32(item["age"]); // 执行插入操作 using (SQLiteCommand command = new SQLiteCommand("INSERT INTO Users (Name, Age) VALUES (@Name, @Age)", connection)) { command.Parameters.AddWithValue("@Name", name); command.Parameters.AddWithValue("@Age", age); command.ExecuteNonQuery(); } } // 关闭数据库连接 connection.Close(); } ``` 以上代码示例了如何将JSON数组数据(包含"name"和"age"字段)写入到名为"Users"的SQLite数据库表中。实际上,根据具体的数据库数据结构,可以进行相应的调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值