jsonencode

Создайте JSON-форматированный-текст из структурированных данных MATLAB

Описание

пример

txt = jsonencode(data) кодирует data и возвращает вектор символов в формате JSON.

txt = jsonencode(data,Name,Value) кодирует data использование одного или нескольких аргументов пары "имя-значение".

Примеры

свернуть все

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

jsonencode кодирует перечисления без свойств как строки.

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

    '"on"'

По умолчанию, jsonencode кодирует перечисления со свойствами как строки JSON. Можно настроить это поведение.

Создайте SyntaxColors класс, показанный в Define Properties в Классах Перечисления с properties и enumeration.

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

Создайте struct и отобразите закодированное значение, вызвав jsonencode заданный в SyntaxColors.

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]

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: jsonencode(-Inf,'ConvertInfAndNaN',false)

Пользовательское кодирование специальных значений с плавающей точкой NaN, Inf и-Inf в виде true или false. true значение кодирует значения с плавающей точкой как null. false значение кодирует значения как литеральный NaNБесконечность, или -Infinity.

Типы данных: логический

Добавьте добавление отступа в виде true или false. MATLAB отображает текст JSON с добавлением отступа двух пробелов.

Типы данных: логический

Ограничения

  • jsonencode не поддерживает комплексные числа или разреженные массивы. Объектам нужно было закодировать публичные свойства как пары "имя-значение" с get методы заданы на свойствах объектов. jsonencode не поддерживает скрытые свойства.

  • jsonencode не поддерживает рекурсивные структуры, такие как графические объекты, которые содержат ссылки на родительские и дочерние объекты.

  • Если вы будете кодировать, то будете декодировать значение, MATLAB не гарантирует, что тип данных сохраняется. JSON поддерживает меньше типов данных, чем MATLAB, который приводит к потере информации о типе. Например, данные JSON не различают double и int32. Если вы кодируете int32 значение и затем вызывает jsondecode, декодируемое значение является типом double.

  • MATLAB не гарантирует, что форма массива сохраняется. Например, числовой вектор 1 на n закодирован как массив. Если вы вызываете jsondecode, затем MATLAB декодирует массив как N-by-1 вектор.

Советы

  • Сохранить символ ESC новой строки \n, используйте newline функция.

    jsonencode(['one' newline 'two'])
    ans = '"one\ntwo"'
  • Сохранить другой \ символы ESC, рассмотрите вызов sprintf на входе. Протестируйте свой вход, чтобы видеть если sprintf создает желаемый результат.

    jsonencode(sprintf('AB\tCD'))
    ans = '"AB\tCD"'
  • Если вход содержит символ двойной кавычки ", затем функция вставляет \ символ ESC.

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

Алгоритмы

JSON поддерживает меньше типов данных, чем MATLAB. jsonencode преобразует типы данных MATLAB в типы данных JSON, перечисленные здесь.

Тип данных MATLAB

Тип данных JSON

Пример

Вывод

массив, пустой

Массив, пустой

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

логический скаляр

Boolean

jsonencode(true)
'true'

логический вектор

Массив boolean

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

логический массив

Вложенный массив boolean

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"]'

скаляр строки

Строка

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

вектор строки

Массив строк

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

массив строк

Вложенный массив строк

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

пустой символьный вектор

Строка

jsonencode('')
'""'

<missing>

пустой указатель

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]]'

cellArray

Массив сглажен к одной размерности

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}]'

массив структур
objectArray

Вложенный массив объектов

  

скаляр 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"]]'

категориальный скаляр

Строка (string метод раньше создавал формат строки.)

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

категориальный вектор

Массив строк

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

категориальный массив

Вложенный массив строк

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]'

перечисление

Строка

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]}}]}'

Вопросы совместимости

развернуть все

Поведение изменяется в R2021a

Поведение изменяется в R2017b

Смотрите также

|

Введенный в R2017b