一个json里复杂格式分别存储到不同的表中java代码
时间: 2023-08-13 11:29:47 浏览: 137
假设我们有一个复杂的 JSON 数据,其中包含了多个对象和数组,我们需要将其转化为 Java 对象,并将其中的某些数据存储到不同的数据库表中。我们可以使用 Jackson 库将 JSON 数据转化为 Java 对象,然后使用 JDBC 将数据存储到数据库中。
以下是一个示例代码,假设我们需要将 JSON 数据中的用户信息存储到 user 表中,商品信息存储到 item 表中:
```java
// 导入所需的类
import com.fasterxml.jackson.databind.ObjectMapper;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
// 定义 User 类,用于存储用户信息
class User {
private String name;
private int age;
// 省略 getter 和 setter 方法
}
// 定义 Item 类,用于存储商品信息
class Item {
private String name;
private double price;
// 省略 getter 和 setter 方法
}
public class JsonToDb {
public static void main(String[] args) {
// 定义 JSON 数据
String json = "{ \"user\": { \"name\": \"Alice\", \"age\": 20 }, \"items\": [ { \"name\": \"item1\", \"price\": 10.0 }, { \"name\": \"item2\", \"price\": 20.0 } ] }";
try {
// 将 JSON 数据转化为 Java 对象
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(json);
User user = mapper.treeToValue(rootNode.get("user"), User.class);
List<Item> items = mapper.readValue(rootNode.get("items").traverse(), new TypeReference<List<Item>>() {});
// 存储用户信息到 user 表中
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
PreparedStatement stmt = conn.prepareStatement("INSERT INTO user (name, age) VALUES (?, ?)");
stmt.setString(1, user.getName());
stmt.setInt(2, user.getAge());
stmt.executeUpdate();
// 存储商品信息到 item 表中
for (Item item : items) {
stmt = conn.prepareStatement("INSERT INTO item (name, price) VALUES (?, ?)");
stmt.setString(1, item.getName());
stmt.setDouble(2, item.getPrice());
stmt.executeUpdate();
}
// 关闭连接
conn.close();
} catch (IOException | SQLException e) {
e.printStackTrace();
}
}
}
```
以上代码中,我们首先使用 ObjectMapper 将 JSON 数据转化为 Java 对象。然后使用 JDBC 将用户信息存储到 user 表中,将商品信息存储到 item 表中。需要注意的是,在存储商品信息时需要遍历 items 数组。
阅读全文