Main Content

jsonencode

구조화된 MATLAB 데이터에서 JSON 형식의 텍스트 생성

설명

예제

txt = jsonencode(data)data를 인코딩하고 문자형 벡터를 JSON 형식으로 반환합니다.

txt = jsonencode(data,Name,Value)는 하나 이상의 이름-값 쌍의 인수를 사용하여 data를 인코딩합니다.

예제

모두 축소

value = {'one'; 'two'; 'three'};
jsonencode(value)
ans = 
'["one","two","three"]'

jsonencode는 속성이 없는 열거형을 string형으로 인코딩합니다.

on = matlab.lang.OnOffSwitchState.on;
jsonencode(on)
ans =

    '"on"'

기본적으로 jsonencode는 속성이 있는 열거형을 JSON 문자열로 인코딩합니다. 이 동작을 사용자 지정할 수 있습니다.

열거형 클래스에 속성 정의하기 항목에 나온 SyntaxColors 클래스를 propertiesenumeration을 사용하여 만듭니다.

jsonencode는 열거형을 JSON 문자열로 인코딩합니다.

jsonencode(SyntaxColors.Error)
ans =

    '"Error"'

사용자 지정된 jsonencode 함수를 추가합니다. 이 함수는 MATLAB® jsonencode 함수와 동일한 시그니처를 가져야 합니다. 업데이트된 methods 블록은 다음과 같습니다.

methods
    function c = SyntaxColors(r, g, b)  
        c.R = r; c.G = g; c.B = b;
    end
    function json = jsonencode(obj, varargin)
        s = struct('R', obj.R, 'G', obj.G, 'B', obj.B);
        json = jsonencode(s, varargin{:});
    end
end

구조체를 만들고 SyntaxColors에 정의된 jsonencode를 호출하여 인코딩된 값을 표시합니다.

err = SyntaxColors.Error;
s = struct('Error', err);
jsonencode(s)
ans = '{"Error":{"R":1,"G":0,"B":0}}'

여러 데이터형을 포함하는 구조체를 JSON으로 변환합니다.

s.Width = 800;
s.Height = 600;
s.Title = 'View from the 15th Floor';
s.Animated = false;
s.IDs = [116, 943, 234, 38793];
jsonencode(s,PrettyPrint=true)
ans = 
    '{
       "Width": 800,
       "Height": 600,
       "Title": "View from the 15th Floor",
       "Animated": false,
       "IDs": [
         116,
         943,
         234,
         38793
       ]
     }'

입력 인수

모두 축소

MATLAB 데이터로, 지원되는 임의의 MATLAB 데이터형으로 지정됩니다. 자세한 내용은 제한 사항 항목을 참조하십시오. 열거형에 대해 jsonencode를 사용자 지정하는 방법에 대한 자세한 내용은 속성이 있는 인코딩된 열거형 사용자 지정하기 항목을 참조하십시오.

예: s.IDs = [116, 943, 234, 38793]

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: jsonencode(-Inf,ConvertInfAndNaN=false)

특수 부동소수점 값 NaN, Inf, -Inf의 사용자 지정 인코딩으로, 숫자형 또는 논리값 1(true)이나 0(false)으로 지정됩니다. true 값은 이런 부동소수점 값을 null로 인코딩합니다. false 값은 값을 리터럴 NaN, Infinity, -Infinity 중 하나로 인코딩합니다.

데이터형: logical

들여쓰기를 추가할지 여부로, true 또는 false로 지정됩니다. MATLAB은 공백 2개만큼 들여쓰기하여 JSON 텍스트를 표시합니다.

데이터형: logical

제한 사항

  • jsonencode는 복소수 숫자나 희소 배열을 지원하지 않습니다. 객체는 객체 속성에 정의된 get 메서드를 사용하여 이름-값 쌍으로 인코딩된 퍼블릭 속성을 가져야 합니다. jsonencode는 은닉 속성을 지원하지 않습니다.

  • jsonencode는 부모 객체와 자식 객체에 대한 참조가 들어 있는 그래픽스 객체와 같은 재귀적 구조체를 지원하지 않습니다.

  • 어떤 값을 인코딩한 후 디코딩하는 경우 MATLAB이 그 데이터형을 유지한다는 보장은 없습니다. JSON은 MATLAB보다 지원하는 데이터형 개수가 적기 때문에, 데이터형 정보가 손실됩니다. 예를 들어, JSON 데이터는 double형과 int32형을 구분하지 않습니다. int32형 값을 인코딩한 다음 jsondecode를 호출하는 경우, 디코딩된 값은 double형입니다.

  • MATLAB이 배열의 형태를 그대로 유지한다는 보장은 없습니다. 예를 들어, 1×N 숫자형 벡터는 배열로 인코딩됩니다. jsondecode를 호출하는 경우 MATLAB은 이 배열을 N×1 벡터로 디코딩합니다.

  • 새 줄 이스케이프 문자 \n을 유지하려면 newline 함수를 사용하십시오.

    jsonencode(['one' newline 'two'])
    ans = '"one\ntwo"'
  • 다른 \ 이스케이프 문자를 유지하려면 입력값에 대해 sprintf를 호출하십시오. sprintf가 원하는 결과를 만드는지 입력값을 테스트합니다.

    jsonencode(sprintf('AB\tCD'))
    ans = '"AB\tCD"'
  • 입력값에 큰따옴표 "가 포함되어 있으면 함수가 \ 이스케이프 문자를 삽입합니다.

    jsonencode('one"two')
    ans = '"one\"two"'

알고리즘

JSON은 MATLAB보다 지원하는 데이터형 개수가 적습니다. jsonencode는 MATLAB 데이터형을 아래에 나열된 JSON 데이터형으로 변환합니다.

MATLAB 데이터형

JSON 데이터형

예제

출력값

배열, 비어 있음

배열, 비어 있음

jsonencode([])
jsonencode(string.empty)
'[]'

논리형 스칼라

부울

jsonencode(true)
'true'

논리형 벡터

부울로 구성된 배열

jsonencode([true,false,false])
'[true,false,false]'

논리형 배열

부울로 구성된 중첩 배열

jsonencode(logical([0,1,0;1,1,0]))
'[[false,true,false],[true,true,false]]'

문자형 벡터

문자열

jsonencode('This is a char.')
'"This is a char."'

문자형 배열

문자열로 구성된 배열

jsonencode(['AC';'EG'])
'["AC","EG"]'

string형 스칼라

문자열

jsonencode("This is a string.")
'"This is a string."'

string형 벡터

문자열로 구성된 배열

jsonencode(["AC";"EG"])
'["AC","EG"]'

string형 배열

문자열로 구성된 중첩 배열

jsonencode(["AC","EG";"BD","FH"])
'[["AC","EG"],["BD","FH"]]'

빈 문자형 벡터

문자열

jsonencode('')
'""'

<missing>

null

jsonencode(string(nan))
'null'

숫자형 스칼라

숫자

jsonencode(2.5)
'2.5'

숫자형 벡터

숫자로 구성된 배열

jsonencode(1:3)
'[1,2,3]'

숫자형 배열

숫자로 구성된 중첩 배열

jsonencode(eye(2))
'[[1,0],[0,1]]'

복소수

지원 안 됨

  

테이블

객체로 구성된 배열

Name = {'Jones';'Brown'};
Age = [40;49];
jsonencode(table(Name,Age))
'[{"Name":"Jones","Age":40},{"Name":"Brown","Age":49}]'

셀형 스칼라

요소 1개로 구성된 배열

jsonencode({5})
'[5]'

셀형 벡터

배열

jsonencode({'a',true,[2;3]})
'["a",true,[2,3]]'

셀형 배열

차원 하나로 나열된 배열

jsonencode({1 2;3 4})
'[1,3,2,4]'

구조체형 스칼라
객체 스칼라

객체
객체(퍼블릭 속성은 name-value 쌍으로 인코딩됨)

jsonencode(struct('a','value'))
'{"a":"value"}'

구조체형 벡터
객체 벡터

객체로 구성된 배열

jsonencode(struct('a',{true,true,false}))
'[{"a":true},{"a":true},{"a":false}]'

구조체형 배열
객체 배열

객체로 구성된 중첩 배열

  

datetime형 스칼라

문자열(문자열 형식으로 변환하기 위해 string 메서드가 사용됨)

jsonencode(datetime('tomorrow'))
'"04-Nov-2016"'

datetime형 벡터

문자열로 구성된 배열

DT = datetime({'8 April 2015','9 May 2015'}, ...
    'InputFormat','d MMMM yyyy');
jsonencode(DT)
'["08-Apr-2015","09-May-2015"]'

datetime형 배열

문자열로 구성된 중첩 배열

DT = datetime(...
    [{'April 2015','May 2015'};{'June 2015','July 2015'}], ...
    'InputFormat','MMMM yyyy');
jsonencode(DT)
'[["01-Apr-2015","01-May-2015"],
["01-Jun-2015","01-Jul-2015"]]'

categorical형 스칼라

문자열(문자열 형식으로 변환하기 위해 string 메서드가 사용됨)

jsonencode(categorical({'r'}))
'"r"'

categorical형 벡터

문자열로 구성된 배열

jsonencode(categorical({'r';'g';'b'}))
'["r","g","b"]'

categorical형 배열

문자열로 구성된 중첩 배열

jsonencode(categorical( ...
    {'r' 'b' 'g'; ...
    'g' 'r' 'b'; ...
    'b' 'r' 'g'}))
'[["r","b","g"],["g","r","b"],["b","r","g"]]'

containers.Map

객체

jsonencode(containers.Map( ...
    {'Jan','Feb','Mar'}, ...
    [327,368,197]))
'{"Feb":368,"Jan":327,"Mar":197}'

NaN
Inf

null

jsonencode([1,2,NaN,3,Inf])
'[1,2,null,3,null]'

열거형

문자열

jsonencode(matlab.lang.OnOffSwitchState.on)
'"on"'

스칼라 MATLAB 객체를 ([] 문자로 묶인) 스칼라 JSON 배열로 전달하려면 셀형 배열 생성 연산자 {}를 사용하여 객체를 변환하십시오. 예를 들어, 다음 코드는 features 필드의 값을 스칼라 JSON 배열로 변환합니다.

S = struct("features", struct("type", "Feature", "geometry",...
    struct("type", "point", "coordinates", [-105, 40])));
S.features = {S.features};
s = jsonencode(S)
s = '{"features":[{"type":"Feature","geometry":{"type":"point","coordinates":[-105,40]}}]}'

확장 기능

스레드 기반 환경
MATLAB®의 backgroundPool을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool을 사용해 코드 실행 속도를 높일 수 있습니다.

버전 내역

R2016b에 개발됨

모두 확장

참고 항목

|