Spec-Zone.ru › Octave 7

5.4.3 Кодирование/декодирование данных JSON

Формат JavaScript Object Notation (JSON) — это очень распространенный, удобочитаемый и структурированный формат данных. GNU Octave поддерживает кодирование и декодирование этого формата с помощью следующих двух функций.

: JSON_txt = jsonencode (object) ¶
: JSON_txt = jsonencode (…, "ConvertInfAndNaN", TF) ¶
: JSON_txt = jsonencode (…, "PrettyPrint", TF) ¶

Кодирование типов данных Octave в текстовый формат JSON.

Входной параметр object — это переменная Octave, которую нужно закодировать.

Выходной параметр JSON_txt — это текстовый формат JSON, содержащий результат кодирования object.

Если значение параметра "ConvertInfAndNaN" равно true, то значения NaN, NA, -Inf, и Inf будут преобразованы в "null" в выходных данных. Если оно равно false, то они останутся в своих исходных значениях. По умолчанию значение этого параметра равно true.

Если значение параметра "PrettyPrint" равно true, выходной текст будет содержать отступы и переводы строк. Если оно равно false, выходные данные будут сжаты и записаны без пробелов. По умолчанию значение этого параметра равно false.

Примечания по программированию:

  • Комплексные числа не поддерживаются.
  • Объекты classdef сначала преобразуются в структуры, а затем кодируются.
  • Для сохранения управляющих символов (например, "\n"), используйте строки в одинарных кавычках.
  • Каждый символ после символа null ("\0") в строке с двойными кавычками будет удален при кодировании.
  • Кодирование и декодирование массива не гарантирует сохранение размеров массива. В частности, строчные векторы будут преобразованы в столбцы.
  • Кодирование и декодирование не гарантируют сохранение типа данных Octave, так как JSON поддерживает меньше типов данных, чем Octave. Например, если вы закодируете int8 и затем декодируете его, вы получите double.

В этой таблице показаны преобразования из типов данных Octave в типы данных JSON:

Тип данных Octave Тип данных JSON
логический скаляр Булево
логический вектор Массив булевых значений, преобразованный в строчный вектор
логический массив Вложенный массив булевых значений
числовой скаляр Число
числовой вектор Массив чисел, преобразованный в строчный вектор
числовой массив Вложенный массив чисел
NaN, NA, Inf, -Inf
когда "ConvertInfAndNaN" = true
"null"
NaN, NA, Inf, -Inf
когда "ConvertInfAndNaN" = false
"NaN", "NaN", "Infinity", "-Infinity"
пустой массив "[]"
символьный вектор Строка
символьный массив Массив строк
пустой символьный массив ""
элемент ячейки скаляр Массив
элемент ячейки вектор Массив, преобразованный в строчный вектор
элемент ячейки массив Массив, сглаженный в строчный вектор
структурный скаляр Объект
структурный вектор Массив объектов, преобразованный в строчный вектор
структурный массив Вложенный массив объектов
объект classdef Объект

Примеры:

jsonencode ([1, NaN; 3, 4])
⇒ [[1,null],[3,4]]


jsonencode ([1, NaN; 3, 4], "ConvertInfAndNaN", false)
⇒ [[1,NaN],[3,4]]


## Escape characters inside a single-quoted string
jsonencode ('\0\a\b\t\n\v\f\r')
⇒ "\\0\\a\\b\\t\\n\\v\\f\\r"


## Escape characters inside a double-quoted string
jsonencode ("\a\b\t\n\v\f\r")
⇒ "\u0007\b\t\n\u000B\f\r"


jsonencode ([true; false], "PrettyPrint", true)
⇒ ans = [
     true,
     false
   ]


jsonencode (['foo', 'bar'; 'foo', 'bar'])
⇒ ["foobar","foobar"]


jsonencode (struct ('a', Inf, 'b', [], 'c', struct ()))
⇒ {"a":null,"b":[],"c":{}}


jsonencode (struct ('structarray', struct ('a', {1; 3}, 'b', {2; 4})))
⇒ {"structarray":[{"a":1,"b":2},{"a":3,"b":4}]}


jsonencode ({'foo'; 'bar'; {'foo'; 'bar'}})
⇒ ["foo","bar",["foo","bar"]]


jsonencode (containers.Map({'foo'; 'bar'; 'baz'}, [1, 2, 3]))
⇒ {"bar":2,"baz":3,"foo":1}

См. также: jsondecode.

: object = jsondecode (JSON_txt) ¶
: object = jsondecode (…, "ReplacementStyle", rs) ¶
: object = jsondecode (…, "Prefix", pfx) ¶
: object = jsondecode (…, "makeValidName", TF) ¶

Декодирование текста, отформатированного в формате JSON.

Входной параметр JSON_txt — это строка, содержащая текст в формате JSON.

Выходной параметр object — это объект Octave, содержащий результат декодирования JSON_txt.

Дополнительную информацию о параметрах "ReplacementStyle" и "Prefix" см. в matlab.lang.makeValidName.

Если значение параметра "makeValidName" равно false, имена не будут изменены matlab.lang.makeValidName, и параметры "ReplacementStyle" и "Prefix" будут проигнорированы.

ПРИМЕЧАНИЕ: Декодирование и кодирование текста JSON не гарантируют воспроизведение исходного текста, так как некоторые имена могут быть изменены matlab.lang.makeValidName.

В этой таблице показаны преобразования из типов данных JSON в типы данных Octave:

Тип данных JSON Тип данных Octave
Булево логический скаляр
Число скалярный double
Строка вектор символов
Объект скалярная структура (имена полей структуры могут отличаться от ключей объекта JSON из-за matlab_lang_makeValidName
null, внутри числового массива NaN
null, внутри нечислового массива пустой массив double []
Массив различных типов данных массив ячеек
Массив булевых значений логический массив
Массив чисел массив double
Массив строк массив ячеек символьных векторов (cellstr)
Массив объектов с одинаковыми именами полей массив структур
Массив объектов с разными именами полей массив ячеек скалярных структур

Примеры:

jsondecode ('[1, 2, null, 3]')
    ⇒ ans =

      1
      2
    NaN
      3


jsondecode ('["foo", "bar", ["foo", "bar"]]')
    ⇒ ans =
       {
         [1,1] = foo
         [2,1] = bar
         [3,1] =
         {
           [1,1] = foo
           [2,1] = bar
         }

       }


jsondecode ('{"nu#m#ber": 7, "s#tr#ing": "hi"}', ...
            'ReplacementStyle', 'delete')
    ⇒ scalar structure containing the fields:

         number = 7
         string = hi


jsondecode ('{"nu#m#ber": 7, "s#tr#ing": "hi"}', ...
            'makeValidName', false)
    ⇒ scalar structure containing the fields:

         nu#m#ber = 7
         s#tr#ing = hi


jsondecode ('{"1": "one", "2": "two"}', 'Prefix', 'm_')
    ⇒ scalar structure containing the fields:

         m_1 = one
         m_2 = two

См. также: jsonencode, matlab.lang.makeValidName.

© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v7.2.0/JSON-data-encoding_002fdecoding.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API