Создайте 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]}}]}'