Представление JSON типов данных MATLAB

Эта тема описывает представление 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

Тип данных MATLABJSON маленькое обозначениеJSON большое обозначение
doublenumber
{
   "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]
}
4242
{
   "mwtype": "double",
   "mwsize": [1,1],
   "mwdata": [42]
}

Числовые типы: NaN, Inf, -Inf

  • NaN, Inf, -Inf является числовыми типами, чьим базовым классом MATLAB может быть или double или single только. NaN, Inf, -Inf не может быть представлен как целочисленный тип в MATLAB.

Тип данных MATLABJSON маленькое обозначение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 маленькое обозначение.

Тип данных MATLABJSON большое обозначение

int8, uint8, int16, uint16

int32, uint32, int64, uint64

{
   "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 содержат действительные и мнимые части, представленные бок о бок.

Тип данных MATLABJSON большое обозначение
a + bi
{
   "mwtype": "double",
   "mwsize": [1,1],
   "mwcomplex": true,
   "mwdata": [a b]
}
Пример: 
3 + 4i
{
   "mwtype": "double",
   "mwsize": [1,1],
   "mwcomplex": true,
   "mwdata": [3,4]
}

'characters'

Тип данных MATLABJSON маленькое обозначениеJSON большое обозначение
charstring
{
   "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"]
}

Логический

Тип данных MATLABJSON маленькое обозначениеJSON большое обозначение
logicaltrue | false
{
   "mwtype": "logical",
   "mwsize": [1,1],
   "mwdata": [true | false]
}
Пример:  
logical(1) или truetrue
{
   "mwtype": "logical",
   "mwsize": [1,1],
   "mwdata": [true]
}
logical(0) или falsefalse
{
   "mwtype": "logical",
   "mwsize": [1,1],
   "mwdata": [false]
}

Массивы ячеек

Тип данных MATLABJSON большое обозначение
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"] }
             ]
}

Структуры

Тип данных MATLABJSON маленькое обозначение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.

Тип данных MATLABJSON маленькое обозначение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 задано путем включения размерностей как списка, разделенного запятыми в [].

Тип данных MATLABJSON маленькое обозначение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, чтобы преобразовать индексы в линейные индексы.

Код:

 sub2ind.js

 writeReadJsonExample.js

Числовые типы: Комплексные числа

Тип данных MATLABJSON большое обозначение
[1 - 2i;...
 3 + 7i]
{
   "mwtype":    "double",
   "mwsize":    [2,1],
   "mwcomplex": true,
   "mwdata":    [1, -2, 3, 7]
}

'characters'

В представлении JSON многомерных символьных массивов:

  • Свойство mwtype должно иметь значение char.

  • Свойство mwdata должно быть массивом strings JSON.

Тип данных MATLABJSON большое обозначение
['boston';...
 '123456']
{
   "mwtype": "char",
   "mwsize": [3,4],
   "mwdata": ["b1o2s3t4o5n6"]
}

Логический

В представлении JSON многомерных логических массивов:

  • Свойство mwtype должно иметь значение logical.

  • Свойство mwdata должно содержать только JSON значения true|false.

Тип данных MATLABJSON маленькое обозначение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.

Тип данных MATLABJSON большое обозначение
{            '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 должны быть в порядке развертывания по столбцам.

Тип данных MATLABJSON большое обозначение
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]
             }
}