Wie zu zwingen, SQL Server leer zurück JSON array

Ich bin mit SQL Server 2016, die unterstützt JSON PATH zurück JSON-string.
Ich Frage mich, wie man nur ein einfaches leeres json-array, ich meine [] bei meiner Abfrage oder eine sub-Abfrage liefert null zurück. Ich habe versucht, diese-Abfrage:

SELECT '' AS TEST
FOR JSON PATH,ROOT('arr')

gibt:

{"arr":[{"test":""}]}

und auch dieser:

SELECT NULL AS TEST
FOR JSON PATH,ROOT('arr')

gibt:

{"arr":[{}]}

ist es besser, aber immer noch nicht korrigieren, ich brauche das:

{"arr":[]}
InformationsquelleAutor Saman Gholami | 2016-09-19



4 Replies
  1. 5

    Dies funktioniert, und kann zusammengesetzt werden, die innerhalb einer anderen for json – Abfrage:

    select json_query('[]') arr 
        for json path, without_array_wrapper
  2. 3

    Können Sie immer überprüfen diese mit ISNULL, z.B.:

    select ISNULL( (SELECT * FROM sys.tables where 1=2 FOR JSON PATH), '[]')

    Wenn Sie diese in der app-Schicht, vielleicht wäre es besser, zu prüfen, gibt es einige Ergebnisse im data access-code, und wenn nicht gerade zurück von [] oder {}.

  3. 1

    Ein wenig Anleitung, aber wenn Sie brauchen eine schnelle hack, hier gehen Sie:

    DECLARE @JSON NVARCHAR(MAX) = (SELECT NULL AS test
    FOR JSON PATH,ROOT('arr'))
    
    
    SELECT REPLACE(@json, '{}', '')
  4. 0

    Selbst, JSON_QUERY('[]') AS [features] funktionierte nicht für mich. Ich fand, dass die Ergebnisse waren wie folgt formatiert:

    "features":"[]"

    was nicht wünschenswert war.

    Das gewünschte Ergebnis zu erhalten, ich brauchte, um zu speichern von JSON in eine variable, dann führen Sie eine REPLACE auf das Ergebnis, wie folgt:

    DECLARE @json VARCHAR(MAX) = (SELECT JSON_QUERY('[]') AS [features],
                                         -- Other selected fields elided for brevity 
                                    FROM MyTable
                                     FOR JSON, WITHOUT_ARRAY_WRAPPER, INCLUDE_NULL_VALUES);
    
    SET @json = REPLACE(@json, '"features":"[]"', '"features":[]');
    
    SELECT @json;

    Ja, es ist eine schreckliche hack. Aber es funktioniert, und gibt das Ergebnis zurück ich möchte. Unseren Kunden absolut, muss ein leeres array zurückgegeben, und dies war die beste Möglichkeit, die ich finden konnte, um sicherzustellen, dass es vorhanden war.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.