Prüfen ob das JSON Valide ist:

IF ISJSON(String) > 0

JSON_VALUE() liefert einen Wert

SELECT JSON_VALUE([String]) , '$.result')		-- Wert von Result
SELECT JSON_VALUE([String]) , '$.result.Wegpunkt')      -- Wert von Wegpunkt unterhalb von Result
SELECT JSON_VALUE([String]) , '$.result.Wegpunkte[0]')  -- Erster Wert von Wegpunkte unterhalb von Result

JSON_QUERY() gibt ein JSON-Object zurück

SELECT JSON_ QUERY ([String]) , '$.result')	      -- JSON-Inhalt von Result
SELECT JSON_ QUERY ([String]) , '$.result.Wegpunkte') -- JSON-Inhalt von Wegpunkte unterhalb von Result

OPENJSON() liefert eine Tabelle zurück

SELECT [key] as A, value as B FROM OPENJSON([String], '$.result') 

Gibt eine Tabelle aller Hauptzweige in Result zurück. Wenn darunter kein Wert sondern wieder JSON steht wird das JSON-Object zurück gegeben.

SELECT spalten.* FROM dbo.tab_TrasseCROSS APPLY OPENJSON([JSONFeld], '$.result')
WITH (Titel varchar(max) '$.titel',
      Besitzer varchar(max) '$.result.Besitzer',
      Menge varchar(max) '$.result.lager.menge'
)
SELECT Name, Surname, JSON_VALUE(jsonCol, '$.info.address.PostCode') AS PostCode
, JSON_VALUE(jsonCol, '$.info.address."Address Line 1"') + ' ' + JSON_VALUE(jsonCol, '$.info.address."Address Line 2"') AS Address
, JSON_QUERY(jsonCol, '$.info.skills') AS Skills
FROM People
WHERE ISJSON(jsonCol) > 0
AND JSON_VALUE(jsonCol, '$.info.address.Town') = 'Belgrade'
AND Status = 'Active'
ORDER
BY JSON_VALUE(jsonCol, '$.info.address.PostCode')
DECLARE @json NVARCHAR(MAX)
SET @json =  
N'[         { "id" : 2,"info": { "name": "John", "surname": "Smith" }, "age": 25 },
         { "id" : 5,"info": { "name": "Jane", "surname": "Smith", "skills": ["SQL", "C#", "Azure"] }, "dob": "2005-11-04T12:00:00" }   ]'     

SELECT *  FROM OPENJSON(@json)
    WITH (id int 'strict $.id',
          firstName nvarchar(50) '$.info.name', lastName nvarchar(50) '$.info.surname',
          age int, dateOfBirth datetime2 '$.dob',
          skills nvarchar(max) '$.info.skills' as json)
     outer apply openjson( skills )
     with ( skill nvarchar(8) '$' )

Das Skills-Array wird im ersten OPENJSON-Element als das ursprüngliche JSON-Textfragment angegeben und mithilfe des APPLY-Operators an eine andere OPENJSON-Funktion übergeben. Die zweite OPENJSON-Funktion analysiert das JSON-Array und gibt Zeichenfolgenwerte als Rowsets mit nur einer Spalte zurück, die mit dem Ergebnis des ersten OPENJSON-Elements verknüpft werden. Das Ergebnis dieser Abfrage wird in der folgenden Tabelle dargestellt:

Ergebnisse

id  firstName  lastName  age  dateOfBirth  skill
2John  Smith25
5Jane  Smith
  2005-11-04T12:00:00  SQL
5Jane  Smith  2005-11-04T12:00:00  C#
5Jane  Smith  2005-11-04T12:00:00  Azure

FOR JSON wandelt Tabellen in JSON um

SELECT id, firstName AS "info.name", lastName AS "info.surname", age, dateOfBirth as dob 
FROM People  
FOR JSON PATH 

Ergebnis

[{    "id": 2,    "info": {        "name": "John",        "surname": "Smith"    },    "age": 25}, {    "id": 5,    "info": {        "name": "Jane",        "surname": "Smith"    },    "dob": "2005-11-04T12:00:00"}] 

JSON_MODYFY Ändert JSON Werte

DECLARE @json NVARCHAR(MAX);
SET @json = '{"info":{"address":[{"town":"Belgrade"},{"town":"Paris"},{"town":"Madrid"}]}}';
SET @json = JSON_MODIFY(@json,'$.info.address[1].town','London');
SELECT modifiedJson = @json;