Wie kann ich eine JSON_VALUE wählen, wenn der Objektnamen einen Apostroph enthält?

stimmen
1

Ich versuche, einen Wert von einigen JSON in einer Tabelle zu erhalten. Dies ist meine Frage:

Select JSON_VALUE(JSON_Data, '$.Person's_ID') FROM Table 

Um zu versuchen, den Wert für Person des Id zu erhalten. Dies ist (Teil des) JSON in der Spalte JSON_Data gespeichert:

Person's_ID: Test

Ich habe versucht, zwei einfache Anführungszeichen verwenden, aber dies gibt noch einen Fehler:

JSON Pfad ist nicht korrekt formatiert. Unerwartetes Zeichen ‚‘‘ist an Position 8.“ gefunden

einen Backslash zu entkommen auch arbeitet das Apostroph nicht.

Veröffentlicht am 08/11/2018 um 00:02
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
4

Dies könnte eine gute Lektion sein, nicht Müll JSON zu machen (und es zu validieren , bevor sie in die Datenbank einfügen) , da nach dem Standard , Apostroph ist ein ungültiges Zeichen in einer Entität Namen. :-)

Sie könnten diese Art von Ersatz versuchen, aber die Leistung wird ziemlich craptastic sein, und es wird ersetzen alle Instanzen Person's_ID, nicht nur , wenn es scheint , als Objekt:

SELECT JSON_VALUE(REPLACE(JSON_Data,'Person''s_ID','Person_s_ID'), '$.Person_s_ID')
  FROM dbo.Table;

Arbeitsbeispiel:

DECLARE @d varchar(255) = '{"Person''s_ID": "Test"}';
SELECT JSON_VALUE(REPLACE(@d,'Person''s','Person_s'), '$.Person_s_ID');

Ergebnis:

Test
Beantwortet am 08/11/2018 um 00:44
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more