Main Content

jsonencode

構造化された MATLAB データから JSON 形式のテキストを作成

説明

txt = jsonencode(data)data をエンコードし、文字ベクトルを JSON 形式で返します。

txt = jsonencode(data,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して、data をエンコードします。

すべて折りたたむ

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

jsonencode はプロパティをもたない列挙型を string としてエンコードします。

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

    '"on"'

既定では、jsonencode はプロパティをもつ列挙型を JSON 文字列としてエンコードします。この動作をカスタマイズできます。

properties および enumeration を使用して列挙クラス内でのプロパティの定義に示される SyntaxColors クラスを作成します。

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 を呼び出して、struct を作成し、エンコードされた値を表示します。

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

異なるデータ型を含む struct を 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 のカスタム エンコード。数値か、logical 1 (true) または 0 (false) として指定します。true 値を指定すると、浮動小数点値は null としてエンコードされます。false 値を指定すると、値はリテラルの NaNInfinity または -Infinity としてエンコードされます。

データ型: logical

インデントの追加。true または false として指定します。MATLAB は、2 つのスペースのインデントを含む JSON テキストを表示します。

データ型: logical

制限

  • jsonencode は複素数またはスパース配列をサポートしていません。オブジェクトには名前と値のペアとしてエンコードされたパブリック プロパティがなければならず、またオブジェクト プロパティで get メソッドが定義されていなければなりません。jsonencode は非表示のプロパティをサポートしません。

  • jsonencode はグラフィックス オブジェクトなどの、親および子オブジェクトへの参照を含む再帰構造体をサポートしません。

  • 値をエンコードした後にデコードした場合、MATLAB ではデータ型が保持される保証はありません。JSON がサポートしているデータ型は MATLAB よりも少ないため、型情報が失われます。たとえば、JSON データでは doubleint32 が区別されません。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)
'[]'

logical スカラー

Boolean

jsonencode(true)
'true'

logical ベクトル

boolean の配列

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

logical 配列

boolean の入れ子配列

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

文字ベクトル

string

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

文字配列

string の配列

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

string スカラー

string

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

string ベクトル

string の配列

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

string 配列

string の入れ子配列

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

空の文字ベクトル

string

jsonencode('')
'""'

<missing>

ヌル

jsonencode(string(nan))
'null'

数値スカラー

数値

jsonencode(2.5)
'2.5'

数値ベクトル

数字の配列

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

数値配列

数値の入れ子配列

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

複素数

サポートなし

  

table

オブジェクトの配列

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

cell スカラー

1 要素の配列

jsonencode({5})
'[5]'

cell ベクトル

配列

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

cell 配列

1 次元にフラット化された配列

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 ベクトル

string の配列

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

datetime 配列

string の入れ子配列

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 ベクトル

string の配列

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

categorical 配列

string の入れ子配列

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

ヌル

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

enumeration

string

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

スカラーの MATLAB オブジェクトをスカラーの JSON 配列 ([] 文字で囲まれています) として渡すには、cell 配列構成演算子 {} を使用してオブジェクトを変換します。たとえば、次のコードは 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 で導入

すべて展開する