Создайте текст в формате JSON из структурированных данных MATLAB
txt = jsonencode(
кодирует data
,Name,Value
)data
использование одного или нескольких аргументов пары "имя-значение".
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('')
| '""' |
| пустой указатель | 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]' |
скаляр структуры | Объект | 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 | Массив строк |
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"]]' |
категориальный скаляр | Строка ( |
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 |
пустой указатель |
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]}}]}'