Spec-Zone.ru › Octave 9

Предыдущая: Числовые данные и строки, Вверх: Преобразование строк [Оглавление][Индекс]

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") используйте строки в одинарных кавычках.
  • Каждый символ после нулевого символа ("\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–2023 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/v9.2.0/JSON-data-encoding_002fdecoding.html

Spec-Zone.ru

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