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 класс, показанный в разделе "Задайте свойства в классах перечисления с 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 должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

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

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

Типы данных: logical

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

Типы данных: logical

Ограничения

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

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

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

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

Совет

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

    jsonencode(['one' newline 'two'])
    ans = '"one\ntwo"'
  • Чтобы сохранить другие \ escape символов, рассмотрите вызов 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"]'

строковый скаляр

Строка

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

массив ячеек

Массив, сплющенный к одной размерности

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

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

Строка (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]}}]}'

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

расширить все

Поведение изменено в R2017b

См. также

|

Введенный в R2016b