2017-08-24 132 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