2016-09-17 18 views
3

私は形式のデータを返すAPIを持っている:のSQL Server 2016 JSON_VALUE構文

JSON_VALUEを使用して
"cars" : {"VW":{"name":"Volkswagen","country":"Germany"}, 
      "GM":{"name":"General Motors","country":"USA"}, 
      "RR":{"name":"Rolls Royce","country":"UK"} 
      } 

、どのように私は2つの文字指定子 "VW"、 "GM" などを参照していますか? パス$.carsを使用して国番号&を取得できますが、(名前のない)フィールドを取得する方法はわかりません。 APIは私のものではないので、私はフォーマットを指示することはできません。

答えて

0

残念ながら、私は今は自分で検証するためにSQL Server 2016にアクセスできません。しかし、thisがお手伝いします。

  • '$' - 入力テキスト内の参照全体JSONオブジェクト
  • '$ .property1' - JSONオブジェクト内の参照プロパティ1
  • '$ [4]' - JSON配列内の参照5番目の要素
  • '$ .property1.property2.array1 [5] .property3.array2 [15] .property4'(インデックスはJavaScriptでのように0からカウントされる) - JSONオブジェクト内の参照複合ネストされたプロパティ
  • 「$の.info 。 "first name" - 情報オブジェクト内の "first name"プロパティを参照します。キーにスペースやドルなどの特殊文字が含まれている場合は、二重引用符で囲む必要があります。
+1

これはどのようにして質問に答えるのに役立ちますか? – GSerg

+1

SEDEがSQL Server 2016上にあるので、ここにアクセスできますhttps://data.stackexchange.com/stackoverflow/query/540682 –

+0

@MartinSmith OPがキーのリスト( "VM"、 "GM" 、 "RR")。 – GSerg

1

このクエリは何を返しますか?

set @json = N' 
["cars" : { 
    "VW":{ 
     "name":"Volkswagen", 
     "country":"Germany"}, 
    "GM":{ 
     "name":"General Motors", 
     "country":"USA"}, 
    "RR":{ 
     "name":"Rolls Royce", 
     "country":"UK"} 
}]'; 

select * 
from OPENJSON(@json) 

出力を共有できますか?

これは答えとしてお詫びしますが、コメントが長すぎるため、このクエリはOPが取得したい要素を見つけるのに役立ちます。

EDIT#1

この:

Declare @js nvarchar(4000) = N'{"cars" : { 
      "VW":{"name":"Volkswagen","country":"Germany"}, 
      "GM":{"name":"General Motors","country":"USA"}, 
      "RR":{"name":"Rolls Royce","country":"UK"}}}' 

SELECT [key] 
FROM OPENJSON (@js,'$.cars') 

はあなたが必要な値が得られます。

EDIT#2

そして、あなたは、この値を参照することができます。

SELECT p1.[key], 
     p2.[key], 
     p2.[value] 
FROM OPENJSON (@js, '$.cars') as p1 
CROSS APPLY (
    SELECT * 
    FROM OPENJSON ([value], '$') 
) p2 
WHERE p1.[key] = 'VW' 

出力:

key key  value  
--- ------- ---------- 
VW name Volkswagen 
VW country Germany  

(2 row(s) returned) 
+0

これはほぼ正しいと思われます。 'openjsonから[key]を選択する(json_query(@js、 '$ .cars'))'それを行います。 – GSerg

+0

@GSergご確認ありがとうございます!私はSQL Server 2016を自分のPCにインストールしていないので、チェックできません。しかし、私は 'OPENJSON'がjson変数から解析されたデータを返すべきであることを覚えています。 – gofr1

+0

私はそれも持っていません。マッキントッシュスミス[posted](http://stackoverflow.com/questions/39543633/sql-server-2016-json-value-syntax/39548190?noredirect=1#comment66405464_39545533)スタック交換データフィドラーの保存されたクエリへのリンクSQL Server 2016を使用します。フォークをクリックして、行ってください。 – GSerg

0

をみんなありがとう。 私はすでに私が答えを知っていると思っていましたが、私はそれをp1.keyとして書いていて、SSMSでエラーを受けて、私を捨てました。私があなたの解決策を読んでからp1と書かなければならなかったのは分かりませんでした。のキーは予約語です。むしろ、カラム 'key'と 'value'を呼び出すのは馬鹿げています。私は、最初はMS SQLの予約語で、2​​番目はISO SQLの予約語です。生活し、学びます。

関連する問題