수색…


JSON 경로 용

SELECT 쿼리의 결과를 JSON 텍스트 형식으로 나타냅니다. FOR JSON PATH 절이 쿼리 후 추가됩니다.

SELECT top 3 object_id, name, type, principal_id FROM sys.objects
FOR JSON PATH

열 이름은 JSON에서 키로 사용되며 셀 값은 JSON 값으로 생성됩니다. 쿼리의 결과는 JSON 객체의 배열입니다.

[
  {"object_id":3,"name":"sysrscols","type":"S "},       
  {"object_id":5,"name":"sysrowsets","type":"S "},
  {"object_id":6,"name":"sysclones","type":"S "}
]

principal_id 열의 NULL 값은 무시됩니다 (생성되지 않음).

열 별칭이있는 JSON PATH의 경우

FOR JSON PATH를 사용하면 열 별칭을 사용하여 출력 JSON의 형식을 제어 할 수 있습니다.

SELECT top 3 object_id as id, name as [data.name], type as [data.type]
FROM sys.objects
FOR JSON PATH

열 별칭이 키 이름으로 사용됩니다. 도트로 구분 된 별칭 (data.name 및 data.type)은 중첩 된 객체로 생성됩니다. 두 개의 열이 점 표기법에서 동일한 접두사를 갖는 경우, 단일 객체로 그룹화됩니다 (이 예제의 데이터).

[
  {"id":3,"data":{"name":"sysrscols","type":"S "}},
  {"id":5,"data":{"name":"sysrowsets","type":"S "}},
  {"id":6,"data":{"name":"sysclones","type":"S "}}
]

JSON 절에 대해 배열 래퍼가없는 경우 (출력에서 단일 객체)

WITHOUT_ARRAY_WRAPPER 옵션을 사용하면 배열 대신 단일 객체를 생성 할 수 있습니다. 단일 행 / 객체를 반환한다는 것을 알고있는 경우이 옵션을 사용합니다.

SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
WHERE object_id = 3
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER

이 경우 단일 개체가 반환됩니다.

{"object_id":3,"name":"sysrscols","type":"S "}

INCLUDE_NULL_VALUES

FOR JSON 절은 셀의 NULL 값을 무시합니다. "key": NULL 값을 포함하는 셀에 대해 널 쌍을 생성하려면 쿼리에 INCLUDE_NULL_VALUES 옵션을 추가하십시오.

SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
FOR JSON PATH, INCLUDE_NULL_VALUES

principal_id 열의 NULL 값이 생성됩니다.

[
  {"object_id":3,"name":"sysrscols","type":"S ","principal_id":null},
  {"object_id":5,"name":"sysrowsets","type":"S ","principal_id":null},
  {"object_id":6,"name":"sysclones","type":"S ","principal_id":null}
]

ROOT 객체로 결과 래핑하기

반환 된 JSON 배열을 지정된 키와 함께 추가 루트 객체로 래핑합니다.

SELECT top 3 object_id, name, type FROM sys.objects
FOR JSON PATH, ROOT('data')

쿼리의 결과는 래퍼 객체 안에 JSON 객체 배열입니다.

{
  "data":[
           {"object_id":3,"name":"sysrscols","type":"S "},
           {"object_id":5,"name":"sysrowsets","type":"S "},
           {"object_id":6,"name":"sysclones","type":"S "}
         ]
}

JSON AUTO 용

두 번째 테이블의 값을 JSON 객체의 중첩 된 하위 배열로 자동 중첩합니다.

SELECT top 5 o.object_id, o.name, c.column_id, c.name
FROM sys.objects o
    JOIN sys.columns c ON o.object_id = c.object_id 
FOR JSON AUTO

쿼리의 결과는 JSON 객체의 배열입니다.

[
  {
   "object_id":3,
   "name":"sysrscols",
   "c":[
        {"column_id":12,"name":"bitpos"},
        {"column_id":6,"name":"cid"}
       ]
  },
  {
    "object_id":5,
    "name":"sysrowsets",
    "c":[
         {"column_id":13,"name":"colguid"},
         {"column_id":3,"name":"hbcolid"},
         {"column_id":8,"name":"maxinrowlen"}
     ]
  }
]

사용자 정의 중첩 JSON 구조 만들기

FOR JSON PATH 또는 FOR JSON AUTO를 사용하여 만들 수없는 복잡한 JSON 구조가 필요한 경우 FOR JSON 하위 쿼리를 열 표현식으로 설정하여 JSON 출력을 사용자 정의 할 수 있습니다.

SELECT top 5 o.object_id, o.name,
        (SELECT column_id, c.name
            FROM sys.columns c WHERE o.object_id = c.object_id
            FOR JSON PATH) as columns,
        (SELECT parameter_id, name
            FROM sys.parameters p WHERE o.object_id = p.object_id
            FOR JSON PATH) as parameters
FROM sys.objects o
FOR JSON PATH

각 하위 쿼리는 기본 JSON 콘텐츠에 포함될 JSON 결과를 생성합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow