Эта тема описывает представление JSON типов данных MATLAB®. Объектная нотация JavaScript или JSON являются основанным на тексте, языком программирования независимый формат обмена данными. Стандарт JSON задан в RFC 7159 и может представлять четыре типов примитивов и два структурированных типа. Поскольку JSON является независимым языком программирования, можно представлять типы данных MATLAB в JSON. Для больше о типах данных MATLAB, смотрите Основной принцип Классы MATLAB (MATLAB).
Используя представление JSON типов данных MATLAB, вы можете:
Представляйте данные или переменные в клиентском коде, чтобы служить входными параметрами к функции MATLAB, развернутой на сервере.
Проанализируйте ответ от экземпляра MATLAB Production Server™ для дальнейшей манипуляции в клиентском коде.
Ответ с сервера содержит array JSON, где каждый элемент массива соответствует выводу развернутой функции MATLAB, представленной как object JSON.
Можно представлять типы данных MATLAB в JSON использование двух форматов: маленький и большой.
Маленький формат обеспечивает упрощенное представление типов данных MATLAB в JSON. Существует взаимно-однозначное отображение между типами данных MATLAB и их соответствующим представлением JSON. Типы данных MATLAB, которые являются скаляром и типа double, logical и char, могут быть представлены с помощью маленького обозначения. Многомерные массивы MATLAB типа double, logical и struct могут также быть представлены с помощью маленького обозначения.
Большой формат обеспечивает типичное представление типов данных MATLAB в JSON. Большой формат использует обозначение object JSON, состоящее из пар "имя-значение" свойства, чтобы представлять данные. Можно использовать большое обозначение для любого типа данных MATLAB, который не может быть представлен в маленьком обозначении. Ответ от MATLAB Production Server всегда использует большое обозначение.
object JSON содержит следующие пары "имя-значение" свойства:
| PropertyName | Значение свойства |
|---|---|
"mwtype" | JSON string, представляющий тип данных. Значение свойства задано в "". "double" | "single" "int8" | "uint8" | "int16" | "uint16" "int32" | "uint32" | "int64" | "uint64" "logical" | "char" | "struct" | "cell" |
"mwsize" | array JSON, представляющий размерности данных. Задайте значение свойства путем включения размерностей как списка, разделенного запятыми в []. |
"mwdata" | JSON array, представляющий фактические данные. Значение свойства задано путем включения данных как списка, разделенного запятыми в []. |
"mwcomplex"(при представлении комплексных чисел.) | Установите на true JSON. |
MATLAB Compiler SDK™ имеет четыре служебных функции, которые делают данные о преобразовании между MATLAB и JSON более простыми. Они:
| FunctionName | Цель |
|---|---|
mps.json.encode (MATLAB Compiler SDK) | Преобразуйте данные MATLAB в текст JSON с помощью MATLAB Production Server схема JSON |
mps.json.decode (MATLAB Compiler SDK) | Преобразуйте вектор символов или строку в MATLAB Production Server схема JSON к данным MATLAB |
mps.json.encoderequest (MATLAB Compiler SDK) | Преобразуйте данные MATLAB в запросе к серверу к тексту JSON с помощью MATLAB Production Server схема JSON |
mps.json.decoderesponse (MATLAB Compiler SDK) | Преобразуйте текст JSON от ответа сервера до данных MATLAB |
Представление JSON типов данных MATLAB
double, single| Тип данных MATLAB | JSON маленькое обозначение | JSON большое обозначение |
|---|---|---|
double | number | {
"mwtype": "double",
"mwsize": [1,1],
"mwdata": [number]
}
|
single | Никакое маленькое представление. | {
"mwtype": "single",
"mwsize": [1,1],
"mwdata": [number]
}
|
| Пример: | ||
double(12.905) | 12.905 | {
"mwtype": "double",
"mwsize": [1,1],
"mwdata": [12.905]
}
|
single(20.15) | Никакое маленькое представление. | {
"mwtype": "single",
"mwsize": [1,1],
"mwdata": [20.15]
}
|
| 42 | 42 | {
"mwtype": "double",
"mwsize": [1,1],
"mwdata": [42]
}
|
NaN, Inf, -InfNaN, Inf, -Inf является числовыми типами, чьим базовым классом MATLAB может быть или double или single только. NaN, Inf, -Inf не может быть представлен как целочисленный тип в MATLAB.
| Тип данных MATLAB | JSON маленькое обозначение | JSON большое обозначение |
|---|---|---|
NaN | {"mwdata":"NaN"} | {
"mwtype": "double",
"mwsize": [1,1],
"mwdata": ["NaN"]
}
{
"mwtype": "double",
"mwsize": [1,1],
"mwdata": [{"mwdata":"NaN"}]
}
|
Inf | {"mwdata":"Inf"} | {
"mwtype": "double",
"mwsize": [1,1],
"mwdata": ["Inf"]
}
{
"mwtype": "double",
"mwsize": [1,1],
"mwdata": [{"mwdata":"Inf"}]
}
|
-Inf | {"mwdata":"-Inf"} | {
"mwtype": "double",
"mwsize": [1,1],
"mwdata": ["-Inf"]
}
{
"mwtype": "double",
"mwsize": [1,1],
"mwdata": [{"mwdata":"-Inf"}]
}
|
[] пустой double | [] | {
"mwtype": "double",
"mwsize": [0,0],
"mwdata": [ ]
}
|
Целочисленные типы из MATLAB не могут быть представлены с помощью JSON маленькое обозначение.
| Тип данных MATLAB | JSON большое обозначение |
|---|---|
| {
"mwtype": "int8" | "uint8" | "int16" | "uint16" |
"int32" | "uint32" | "int64" | "uint64" ,
"mwsize": [1,1],
"mwdata": [number]
}
|
| Пример: | |
int8(23) | {
"mwtype": "int8",
"mwsize": [1,1],
"mwdata": [23]
}
|
uint8(27) | {
"mwtype": "uint8",
"mwsize": [1,1],
"mwdata": [27]}
|
Комплексные числа из MATLAB не могут быть представлены с помощью JSON маленькое обозначение.
При представлении комплексных чисел из MATLAB в JSON:
Свойство под названием mwcomplex добавляется к object JSON, и это - значение свойства, установлен в true.
Значения свойств для свойства mwdata содержат действительные и мнимые части, представленные бок о бок.
| Тип данных MATLAB | JSON большое обозначение |
|---|---|
a + bi | {
"mwtype": "double",
"mwsize": [1,1],
"mwcomplex": true,
"mwdata": [a b]
}
|
| Пример: | |
3 + 4i | {
"mwtype": "double",
"mwsize": [1,1],
"mwcomplex": true,
"mwdata": [3,4]
}
|
| Тип данных MATLAB | JSON маленькое обозначение | JSON большое обозначение |
|---|---|---|
char | string | {
"mwtype": "char",
"mwsize": [1,1],
"mwdata": [string]
}
|
| Пример: | ||
'a' | "a" | {
"mwtype": "char",
"mwsize": [1,1],
"mwdata": ["a"]
}
|
'hey, jude' | "hey, jude" | {
"mwtype": "char",
"mwsize": [1,9],
"mwdata": ["hey, jude"]
}
|
| Тип данных MATLAB | JSON маленькое обозначение | JSON большое обозначение |
|---|---|---|
logical | true | false | {
"mwtype": "logical",
"mwsize": [1,1],
"mwdata": [true | false]
}
|
| Пример: | ||
logical(1) или true | true | {
"mwtype": "logical",
"mwsize": [1,1],
"mwdata": [true]
}
|
logical(0) или false | false | {
"mwtype": "logical",
"mwsize": [1,1],
"mwdata": [false]
}
|
| Тип данных MATLAB | JSON большое обозначение |
|---|---|
cell | {
"mwtype": "cell",
"mwsize": [<cell dimensions>],
"mwdata": [<cell data>]
}
|
| Пример: | |
{'Primes', [10 23 199],{false,true,'maybe'}} | {
"mwtype": "cell",
"mwsize": [1,3],
"mwdata": ["Primes",
{ "mwtype": "double",
"mwsize": [1,3],
"mwdata": [10,23,199] },
{ "mwtype": "cell",
"mwsize": [1,3],
"mwdata": [false, true,"maybe"] }
]
}
|
| Тип данных MATLAB | JSON маленькое обозначение | JSON большое обозначение |
|---|---|---|
struct | {
"mwtype": "struct",
"mwsize": [<struct dimensions>],
"mwdata": [<struct data>]
}
| |
| Пример: | ||
struct('name', 'John Smith', 'age', 15) | { "name" : "John Smith", "age" : 15 } | {
"mwtype": "struct",
"mwsize": [1,1],
"mwdata": {
"age": [
{
"mwdata": [15],
"mwsize": [1,1],
"mwtype": "double"
}
],
"name": [
{
"mwdata": ["John Smith"],
"mwsize": [1,10],
"mwtype": "char"
}
]
}
} |
x = struct('Name',{{'Casper','Ghost'}},...
'Age',{[14,17,18]},...
'Date', {736676}); | Никакое маленькое представление. | {
"mwtype":"struct",
"mwsize":[1,1],
"mwdata":{
"Name":
[{"mwdata": {'Casper','Ghost'},
"mwsize":[1,2],
"mwtype":"string"}],
"Age":
[{"mwdata":[14,17,18],
"mwsize":[1,3],
"mwtype":"double"}],
"Date":
[{"mwdata":[736676],
"mwsize":[1,1],
"mwtype":"double"}]}
} |
[]Пустые массивы [] не могут иметь типа struct.
| Тип данных MATLAB | JSON маленькое обозначение | JSON большое обозначение |
|---|---|---|
[] | [] | {
"mwtype": "double" | "single"
"int8" | "uint8" | "int16" | "uint16"
"int32" | "uint32" | "int64" | "uint64"
"logical" | "char" | "cell" ,
"mwsize": [0,0],
"mwdata": [ ]
}
|
Большинство многомерных массивов из MATLAB не может быть представлено с помощью JSON маленькое обозначение. Исключения: double, logical и struct. Задайте все данные из многомерных массивов в порядке развертывания по столбцам в свойстве mwdata object JSON. Это упорядоченное расположение соответствует размещению памяти по умолчанию в MATLAB.
double, single, NaN, Inf, -Inf, Целые числаВ представлении JSON многомерных числовых массивов:
Свойство mwtype может принять любое из следующих значений:
"double" | "single" | "int8" | "uint8" | "int16" | "uint16" | "int32" | "uint32" | "int64" | "uint64'
Свойство mwsize задано путем включения размерностей как списка, разделенного запятыми в [].
| Тип данных MATLAB | JSON маленькое обозначение | JSON большое обозначение |
|---|---|---|
[1,2,3;... 4,5,6] | [[1,2,3],[4,5,6]] | {
"mwtype": "double",
"mwsize": [2,3],
"mwdata": [1,4,2,5,3,6]
} |
[1, NaN, -Inf;... 2, 105, Inf] | [[1,{"mwdata": "NaN"},{"mwdata": "-Inf"}],[2,105,{"mwdata": "Inf"}]] | {
"mwtype": "double",
"mwsize": [2,3],
"mwdata": [1, 2, "NaN", 105, "-Inf", "Inf"]
}
|
[ 1 2; 4 5; 7 8 ] | [[1, 2], [4, 5], [7, 8]] | {
"mwtype": "double",
"mwsize": [3,2],
"mwdata": [1,4,7,2,5,8]
} |
a(:,:,1) =
1 2
3 4
5 6
a(:,:,2) =
7 8
9 10
11 12 | [[[1,7],[2,8]],[[3,9],[4,10]],[[5,11],[6,12]]] | {
"mwtype": "double",
"mwsize": [3,2,2],
"mwdata": [1,3,5,2,4,6,7,9,11,8,10,12]
} |
Ниже пример чтения и записи многомерных массивов в порядке развертывания по столбцам в JavaScript®. Пример использует файл JavaScript sub2ind.js, чтобы преобразовать индексы в линейные индексы.
Код:
| Тип данных MATLAB | JSON большое обозначение |
|---|---|
[1 - 2i;... 3 + 7i] | {
"mwtype": "double",
"mwsize": [2,1],
"mwcomplex": true,
"mwdata": [1, -2, 3, 7]
}
|
В представлении JSON многомерных символьных массивов:
Свойство mwtype должно иметь значение char.
Свойство mwdata должно быть массивом strings JSON.
| Тип данных MATLAB | JSON большое обозначение |
|---|---|
['boston';... '123456'] | {
"mwtype": "char",
"mwsize": [3,4],
"mwdata": ["b1o2s3t4o5n6"]
}
|
В представлении JSON многомерных логических массивов:
Свойство mwtype должно иметь значение logical.
Свойство mwdata должно содержать только JSON значения true|false.
| Тип данных MATLAB | JSON маленькое обозначение | JSON большое обозначение |
|---|---|---|
[true,false;... true,false;... true,false] | [[[true,false],[true,false],[true,false]]] | {
"mwtype": "logical",
"mwsize": [3,2],
"mwdata": [true,true,true,false,false,false]
}
|
В представлении JSON многомерных массивов ячеек:
Свойство mwtype должно иметь значение cell.
Свойством mwdata должен быть array JSON, который содержит значения ячеек в их представлении JSON.
| Тип данных MATLAB | JSON большое обозначение |
|---|---|
{ 'hercule', 18540, [33 1 50];...
{'agatha',1920,true}, false, 1950 } | {
"mwtype": "cell",
"mwsize": [2,3],
"mwdata": ["hercule",
{"mwtype": "cell",
"mwsize": [1,3],
"mwdata": ["agatha", 1920, true]
}, 18540, false,
{"mwtype": "double",
"mwsize": [1,3],
"mwdata": [33,1,50]
},1950
]
}
|
В представлении JSON массивов многомерной структуры:
mwdata является object JSON, содержащий пары "имя-значение" свойства.
Имя в каждой паре "имя-значение" свойства совпадает с полем в массиве структур.
Значением в каждой паре "имя-значение" свойства является array JSON, содержащий значения для того поля для каждого элемента в массиве структур. Элементы array JSON должны быть в порядке развертывания по столбцам.
| Тип данных MATLAB | JSON большое обозначение |
|---|---|
struct( 'Name',{'Casper','Ghost';...
'Genie' ,'Wolf'},...
'Ages',{14,17;...
20,23} ) | {
"mwtype": "struct",
"mwsize": [2,2],
"mwdata": {"Name": ["Casper", "Genie",
"Ghost" , "Wolf"],
"Ages": [14,20,
17,23]
}
}
|