2017-08-24 154 views
2

我知道标题相当有问题,但并不是关于在SQL Server中存储JSON数据。将JSONObject映射到SQL服务器

我有一个JSONArray与JSONObjects与键匹配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的表看起来像这样: SQL table

什么是实现这一目标而无需通过每个JSONArray循环最好的方法?

+1

我建议你使用nvarchar而不是varchar。否则,您可能会遇到编码困难。 – Tschallacka

+1

@Tschallacka注意到。会改变这一点。 – Penman

+0

如果您可以将数据库软件更新至2016年,则可以使用漂亮的功能,例如https://docs.microsoft.com/en-us/sql/relational-databases/json/use-for-json-output-in-sql -server-and-in-client-apps-sql-server – Tschallacka

回答

1

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

+0

正在根据其他功能生成JSON数据。我故意去了JSON而不是Java对象 - 因为它符合业务需求。另外,我不知道该怎么做,但我不能在我工作的地方使用Hibernate/Maven。它只能是纯粹的Java。 – Penman

-1
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(); 

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

PS。我讨厌java中的ORM。

+0

Op声明的sql server 2012.不是2016 – Tschallacka

+0

为什么不使用T-SQL? –

+0

A)op陈述没有t-sql,B)你的答案中的功能只能从sql server 2016获得。https://docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact -sql @op正在使用sql server 2012 – Tschallacka