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_makeValidNamenull, внутри числового массива NaNnull, внутри нечислового массива пустой массив 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