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 сначала преобразуются в структуры, а затем кодируются.
- Чтобы сохранить escape-последовательности (например,
"\n"), используйте строки в одинарных кавычках. - Все символы после нулевого символа (
"\0") в строке в двойных кавычках будут отброшены при кодировании. - Не гарантируется, что кодирование и декодирование массива сохранят его размерности. В частности, векторы-строки будут преобразованы в векторы-столбцы.
- Не гарантируется, что кодирование и декодирование сохранят тип данных Octave, поскольку JSON поддерживает меньше типов данных, чем Octave. Например, если закодировать
int8, а затем декодировать его, результатом будетdouble.
В этой таблице показаны преобразования типов данных Octave в типы данных JSON:
Тип данных Octave Тип данных JSON логический скаляр логическое значение логический вектор массив логических значений, преобразованный в вектор-строку логический массив вложенный массив логических значений числовой скаляр число числовой вектор массив чисел, преобразованный в вектор-строку числовой массив вложенный массив чисел NaN,NA,Inf,-Inf
when"ConvertInfAndNaN" = true"null"NaN,NA,Inf,-Inf
when"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–2026 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.4.0/JSON-data-encoding_002fdecoding.html