2017-08-24 2 views
2

タイトルがかなり巧妙ですが、SQL ServerにJSONデータを格納することではありません。JSONObject to SQLサーバーのマップ

私はJSONArrayにSQL Server 2012の列名と一致するキーを持つJSONObjectsを持っています。データをデータベースに適切な列に保存したいと思います。

これを行う明白な方法は、JSONArrayの反復処理であり、個々の挿入コマンドで値を保存することです。私はこれを行う別の方法があるかどうか疑問に思っていた。

私はT-SQLを使いたくありません。私はJavaからのみこれを処理したいです。各JSONArrayをループせずにこれを達成するための最良の方法だろう何 SQL table

:私のSQLServerのテーブルは次のようになります

[ 
    { 
     "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" 
    } 
] 

:ここ

は私JSONArrayのフォーマットに一致するデータの例であります?

+1

私はvarcharの代わりにnvarcharを使用することをお勧めします。そうでなければ、エンコードの難しさに遭遇するかもしれません。 – 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で保存します。ここでは、2つの便利なリンクを行う方法であること Json to Java Hibernate example

+0

別の機能に基づいてJSONデータが生成されています。私は、JavaオブジェクトではなくJSONを意図的に使用しました。ビジネス要件に適しているからです。また、他にどのように置くべきかわかりませんが、私が働いている場所で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 LIBS)

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を指定しました。Not 2016 – Tschallacka

+0

なぜT-SQLを使用しないのですか? –

+0

A)op not no t-sql、B)回答の機能はSQL Server 2016からのみ利用可能です。https://docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact -sql @opはSQL Server 2012を使用しています – Tschallacka