Создайте JSON-форматированный-текст из структурированных данных MATLAB
text =
jsonencode(data)text = jsonencode(data,'ConvertInfAndNaN',TF)jsonencode не поддерживает комплексные числа, разреженные массивы или перечисления MATLAB. Объектам нужно было закодировать публичные свойства как пары "имя-значение" с методами get, заданными на свойствах объектов.
jsonencode не поддерживает рекурсивные структуры, такие как графические объекты, которые содержат ссылки на родительские и дочерние объекты.
Если вы будете кодировать, то будете декодировать значение, MATLAB не гарантирует, что тип данных сохраняется. JSON поддерживает меньше типов данных, чем MATLAB, который приводит к потере информации о типе. Например, данные JSON не различают double и int32. Если вы кодируете значение int32 и затем вызываете jsondecode, декодируемое значение является типом double.
MATLAB не гарантирует, что форма массива сохраняется. Например, числовой вектор 1 на n закодирован как массив. Если вы вызываете jsondecode, то MATLAB декодирует массив как вектор N-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) | '[]' |
логический скаляр | Булевская переменная | 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"]' |
stringArray | Вложенный массив строк | jsonencode(["AC","EG";"BD","FH"]) | '[["AC","EG"],["BD","FH"]]' |
пустой символьный вектор | Строка | jsonencode('')
| '""' |
| пустой указатель | 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]' |
скаляр структуры | Объект | jsonencode(struct('a','value')) | '{"a":"value"}'
|
вектор структуры | Массив объектов | jsonencode(struct('a',{true,true,false}))
| '[{"a":true},{"a":true},{"a":false}]'
|
массив структур | Вложенный массив объектов | ||
скаляр datetime | Строка (метод | jsonencode(datetime('tomorrow'))
| '"04-Nov-2016"' |
вектор datetime | Массив строк | ||
массив datetime | Вложенный массив строк | DT = datetime({'8 April 2015','9 May 2015'}, ...
'InputFormat','d MMMM yyyy');
jsonencode(DT) | '["08-Apr-2015","09-May-2015"]' |
категориальный скаляр | Строка (метод | 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 |
пустой указатель |
jsonencode([1,2,NaN,3,Inf]) |
'[1,2,null,3,null]' |
Чтобы передать скалярный объект 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]}}]}'