Java读取json数据并存入数据库的操作代码

下面是Java读取Json数据并存入数据库的操作代码的攻略,包含以下四个步骤:

  1. 构建Json数据对象
  2. 读取Json数据
  3. 解析Json数据
  4. 将数据存入数据库

下面进行详细讲解。

步骤一:构建Json数据对象

使用Java构建Json对象可以使用json库的JSONObject类来构建。首先需要导入相应的依赖:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20211205</version>
</dependency>

然后构建Json对象可以这样写:

import org.json.*;

JSONObject jsonObj = new JSONObject();
jsonObj.put("name", "Alice");
jsonObj.put("age", 18);

步骤二:读取Json数据

在读取Json数据之前,需要先将Json数据读入内存。可以从文件或者网络等载体中读入Json数据:

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

// 从文件中读取Json数据
String jsonStr = new String(Files.readAllBytes(Paths.get("data.json")), StandardCharsets.UTF_8);

// 从URL中读取Json数据
URL url = new URL("http://example.com/data.json");
URLConnection conn = url.openConnection();
InputStream input = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String jsonStr = reader.lines().collect(Collectors.joining("\n"));

步骤三:解析Json数据

解析Json数据可以使用json库的JSONObject和JSONArray类来解析。具体方式取决于Json数据的结构。假设Json数据的格式如下:

{
  "name": "Alice",
  "age": 18,
  "address": {
    "city": "Shanghai",
    "street": "Renmin Rd."
  },
  "scores": [80, 90, 95]
}

可以这样解析:

JSONObject jsonObj = new JSONObject(jsonStr);

String name = jsonObj.getString("name");
int age = jsonObj.getInt("age");

JSONObject address = jsonObj.getJSONObject("address");
String city = address.getString("city");
String street = address.getString("street");

JSONArray scores = jsonObj.getJSONArray("scores");
List<Integer> scoreList = new ArrayList<>();
for (int i = 0; i < scores.length(); i++) {
    scoreList.add(scores.getInt(i));
}

步骤四:将数据存入数据库

将数据存入数据库可以使用JDBC或者ORM框架。这里以JDBC为例。假设要将上面解析出来的数据存入一个名为"person"的表中,表结构如下:

Field Type Null Key Default Extra
name varchar(255) NO NULL
age int(11) NO NULL
city varchar(255) YES NULL
street varchar(255) YES NULL
score int(11) YES NULL

可以这样写JDBC代码:

import java.sql.*;

String url = "jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
String username = "root";
String password = "root";

try (Connection conn = DriverManager.getConnection(url, username, password);
     PreparedStatement stmt = conn.prepareStatement("INSERT INTO person (name, age, city, street, score) VALUES (?, ?, ?, ?, ?)")) {

    stmt.setString(1, name);
    stmt.setInt(2, age);
    stmt.setString(3, city);
    stmt.setString(4, street);

    for (int score : scoreList) {
        stmt.setInt(5, score);
        stmt.executeUpdate();
    }

} catch (SQLException e) {
    e.printStackTrace();
}

这样就完成了将Json数据存入数据库的操作。下面给出两个示例:

示例一

假设Json数据如下:

{
  "name": "Tom",
  "age": 23,
  "scores": [80, 78, 92]
}

通过上述步骤完成该Json数据的读取、解析并存入数据库的完整代码如下:

import org.json.*;

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.*;
import java.util.*;
import java.util.stream.Collectors;

public class Example1 {
    public static void main(String[] args) {
        // 从文件中读取Json数据
        String jsonStr = "{\"name\": \"Tom\", \"age\": 23, \"scores\": [80, 78, 92]}";

        // 构建Json对象
        JSONObject jsonObj = new JSONObject(jsonStr);

        // 解析Json对象
        String name = jsonObj.getString("name");
        int age = jsonObj.getInt("age");

        JSONArray scores = jsonObj.getJSONArray("scores");
        List<Integer> scoreList = new ArrayList<>();
        for (int i = 0; i < scores.length(); i++) {
            scoreList.add(scores.getInt(i));
        }

        // 存储数据到数据库
        String url = "jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
        String username = "root";
        String password = "root";

        try (Connection conn = DriverManager.getConnection(url, username, password);
             PreparedStatement stmt = conn.prepareStatement("INSERT INTO person (name, age, score) VALUES (?, ?, ?)")) {

            stmt.setString(1, name);
            stmt.setInt(2, age);

            for (int score : scoreList) {
                stmt.setInt(3, score);
                stmt.executeUpdate();
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

执行完该程序后,可以在MySQL数据库中查看如下数据:

name age city street score
Tom 23 NULL NULL 80
Tom 23 NULL NULL 78
Tom 23 NULL NULL 92

示例二

假设Json数据如下:

{
  "name": "Jerry",
  "age": 25,
  "address": {
    "city": "Beijing",
    "street": "Haidian"
  },
  "scores": [85, 92, 88, 90]
}

通过上述步骤完成该Json数据的读取、解析并存入数据库的完整代码如下:

import org.json.*;

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.*;
import java.util.*;
import java.util.stream.Collectors;

public class Example2 {
    public static void main(String[] args) {
        // 从文件中读取Json数据
        String jsonStr = "{\"name\": \"Jerry\", \"age\": 25, \"address\": {\"city\": \"Beijing\", \"street\": \"Haidian\"}, \"scores\": [85, 92, 88, 90]}";

        // 构建Json对象
        JSONObject jsonObj = new JSONObject(jsonStr);

        // 解析Json对象
        String name = jsonObj.getString("name");
        int age = jsonObj.getInt("age");

        JSONObject address = jsonObj.getJSONObject("address");
        String city = address.getString("city");
        String street = address.getString("street");

        JSONArray scores = jsonObj.getJSONArray("scores");
        List<Integer> scoreList = new ArrayList<>();
        for (int i = 0; i < scores.length(); i++) {
            scoreList.add(scores.getInt(i));
        }

        // 存储数据到数据库
        String url = "jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
        String username = "root";
        String password = "root";

        try (Connection conn = DriverManager.getConnection(url, username, password);
             PreparedStatement stmt = conn.prepareStatement("INSERT INTO person (name, age, city, street, score) VALUES (?, ?, ?, ?, ?)")) {

            stmt.setString(1, name);
            stmt.setInt(2, age);
            stmt.setString(3, city);
            stmt.setString(4, street);

            for (int score : scoreList) {
                stmt.setInt(5, score);
                stmt.executeUpdate();
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

执行完该程序后,可以在MySQL数据库中查看如下数据:

name age city street score
Jerry 25 Beijing Haidian 85
Jerry 25 Beijing Haidian 92
Jerry 25 Beijing Haidian 88
Jerry 25 Beijing Haidian 90

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java读取json数据并存入数据库的操作代码 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • php自动识别文字编码并转换为目标编码的方法

    PHP自动识别文字编码及转换方法攻略 在PHP中,处理中文字符时,常常会遇到文字编码不一致的问题,本文将为你介绍一种PHP自动识别文字编码并转换为目标编码的方法。 Step 1:获取需要转换的文字 获取需要转换的文字,比如从用户提交的表单数据中获取文本信息。在获取之后,需要先判断编码格式,这里使用PHP的mb_detect_encoding()函数进行自动检…

    Java 2023年6月1日
    00
  • JSP开发之hibernate之单向多对一关联的实例

    JSP开发之hibernate之单向多对一关联的实例 在Hibernate中,多对一关系是常见的一种关系,也是应用较广的关系之一。本文将讲解如何使用Hibernate实现单向多对一关联。 创建多对一关联的实体类 在Hibernate中,实现多对一关联关系时,需要定义一个实体类作为“多”的一方,在该实体类中声明一个关联的对象,使用引用类型(通常为另一个实体类的…

    Java 2023年5月31日
    00
  • 解决J2EE-session在浏览器关闭后失效问题

    为了解决J2EE-session在浏览器关闭后失效问题,我们需要进行以下几个步骤: 步骤1:使用Cookie实现Session跨浏览器保存 由于Session会在浏览器关闭时自动失效,因此我们需要使用Cookie实现Session跨浏览器保存,以保证Session在浏览器关闭后仍然是可用的。具体实现方式如下: 在Servlet中创建Session时,同时创建…

    Java 2023年6月15日
    00
  • Centos6.x服务器配置jdk+tomcat+mysql环境(jsp+mysql)

    以下是CentOS 6.x服务器配置JDK+Tomcat+MySQL环境的攻略: 1. 安装JDK 在CentOS 6.x系统上安装JDK可以使用如下命令: yum install java-1.8.0-openjdk-devel 安装完毕之后,可以通过下面的命令查看是否已经安装成功: java -version 2. 安装Tomcat CentOS 6.x…

    Java 2023年5月19日
    00
  • spring security获取用户信息的实现代码

    下面是关于“Spring Security获取用户信息的实现代码”的完整攻略。 1. 简介 Spring Security是一个基于Spring框架的安全管理框架,它可以在Web应用程序的身份验证、授权、验证码、攻击防御等方面提供强大支持。其中,获取用户信息是Spring Security的常见功能之一。 通过Spring Security,我们可以实现以下…

    Java 2023年5月20日
    00
  • JavaWeb文件上传与下载功能解析

    JavaWeb文件上传与下载功能解析 文件上传功能 在JavaWeb中,文件上传主要包括三个部分:前端页面、后端处理、文件保存。 前端页面 文件上传的前端页面需要使用form表单,同时表单属性需要设置为enctype=”multipart/form-data”,以支持文件上传。例如: <form action="upload" me…

    Java 2023年5月19日
    00
  • maven中配置项目的jdk版本无效的排查方式

    请听我讲解maven中配置项目的jdk版本无效的排查方式的完整攻略。 1. 确认maven中配置jdk版本是否正确 在pom.xml文件中配置项目使用的jdk版本,如果这个配置是正确的,那么可以使用maven命令查看项目依赖的jdk版本: mvn help:effective-pom 执行该命令后,会在终端输出effective-pom的结果,其中即可看到j…

    Java 2023年5月20日
    00
  • Java简化复杂系统调用的门面设计模式

    Java简化复杂系统调用的门面设计模式,也叫做Facade模式,是一种结构型设计模式,目的是为系统中的高层模块提供简化、统一的接口,使系统更易于使用和维护。 下面是实现Java门面设计模式的完整攻略: 1. 定义门面类 首先,我们需要定义一个门面类来隐藏系统中的复杂性。这个类需要提供一个简单的接口,封装系统中的一些复杂操作。 public class Sys…

    Java 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部