【问题标题】:Map JSONObject to SQL server将 JSONObject 映射到 SQL 服务器
【发布时间】:2017-08-24 07:44:06
【问题描述】:

我知道这个标题很陈词滥调,但它不是关于在 SQL Server 中存储 JSON 数据。

我有一个带有 JSONObjects 的 JSONArray,其键与 SQL Server 2012 中的列名匹配。我想将数据保存到数据库中的正确列中。

我知道这样做的明显方法是遍历 JSONArray 并使用单独的插入命令保存值。我想知道是否有其他方法可以做到这一点。

我不想使用 T-SQL。我只想从 Java 处理这个。

这是一个与我的JSONArray格式匹配的示例数据:

[
    {
        "FEATURE":"A",
        "OPTION":"92384",
        "ERROR_TYPE":"MISSING",
        "DESCRIPTION":"Feature A is missing the option 92384",
        "SERIAL_NUMBER":"249752-23894"
    },
    {
        "FEATURE":"B",
        "OPTION":"0288394",
        "ERROR_TYPE":"MISSING",
        "DESCRIPTION":"Feature B is missing the option 0288394",
        "SERIAL_NUMBER":"Y2394-20392Q"
    }
]

我的 SQLServer 表如下所示:

在不遍历每个JSONArray 的情况下实现此目的的最佳方法是什么?

【问题讨论】:

  • 我建议您使用 nvarchar 而不是 varchar。否则,您可能会在此过程中遇到编码困难。
  • @Tschallacka 注意到。会改变的。
  • 如果您可以将数据库软件更新到 2016,您可以使用漂亮的功能,例如 docs.microsoft.com/en-us/sql/relational-databases/json/…
  • @Tschallacka 我知道 SQLServer 2016 支持很多关于 JSON 的功能,但我的项目已经完全设置在 SQLServer 2012 上 - 所以,改变它是不行的。

标签: java json sql-server-2012-express


【解决方案1】:

由于您添加了 java 标记,我会将 JSON 转换为 Java 对象并使用 Hibernate 保存它。这里有两个有用的链接如何做到这一点 Json to Java Hibernate example

【讨论】:

  • JSON 数据是基于另一个功能生成的。我故意选择 JSON 而不是 Java 对象——因为它适合业务需求。另外,我不知道该怎么做,但我不能在我工作的地方使用 Hibernate/Maven。它必须是纯 Java 的。
【解决方案2】:
DECLARE @testJson NVARCHAR(4000)= N'[{"id":2,"name":"n2"},{"id":1,"name":"n1"}]'

INSERT
INTO
    test_table SELECT
        *
    FROM
        OPENJSON(@testJson) WITH (
            id int N'$.id',
            name VARCHAR(200) N'$.name'
        )

更新

使用java

jsonStr -> jsonObject 和 getKeys(一些 json 库)

String youJson = "{\"id\":0, \"name\":\"n0\"}";
JsonParser parser = new JsonParser();
JsonObject jsonObject = parser.parse(json).getAsJsonObject();
Set<String> keys = jsonObject.keySet();

然后使用NamedParameterJdbcTemplate和MapSqlParameterSource(spring-jdbc)创建sql并动态设置参数。

附言。我讨厌 Java 中的 ORM。

【讨论】:

  • 操作说明 sql server 2012。不是 2016
  • 为什么不使用 T-SQL?
  • A) op 声明没有 t-sql,B) 您答案中的功能仅适用于 sql server 2016。docs.microsoft.com/en-us/sql/t-sql/functions/…@op 正在使用 sql server 2012
  • 请阅读整个问题。我已经在 J​​SONObjects 的 JSONArray 中有一个 json 数据。我想知道是否有另一种方法可以直接将它们映射到数据库,而无需遍历整个数据集。
  • JdbcTemplate().batchUpdate()
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多