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"那是真的NaN,NA, -InfInf值将转换为"null"在输出中。如果为false,则它们将保持为原始值。此参数的默认值为true。

如果参数的值"PrettyPrint"如果为true,则输出文本将具有缩进和换行。如果为false,则输出将被压缩并在没有空白的情况下写入。此参数的默认值为false。

编程说明:

  • 不支持复数。
  • classdef对象首先转换为structs,然后进行编码。
  • 为了保留转义字符(例如。,"\n"),使用单引号字符串。
  • 空字符之后的每个字符("\0")在adouble中,带引号的字符串将在编码过程中删除。
  • 对数组进行编码和解码不能保证保留数组的维度。特别是,行向量将被重新整形为列向量。
  • 编码和解码不能保证保留Octave数据类型,因为JSON支持的数据类型比Octave少。例如,如果您对int8然后解码,你会得到一个double.

此表显示了从Octave数据类型到JSON数据类型的转换:

Octave数据类型 JSON数据类型
logical scalar Boolean
logical vector Array of Boolean, reshaped to row vector
logical array nested Array of Boolean
numeric scalar Number
numeric vector Array of Number, reshaped to row vector
numeric array nested Array of Number
NaN, NA, Inf, -Inf
"ConvertInfAndNaN" = true
"null"
NaN, NA, Inf, -Inf
"ConvertInfAndNaN" = false
"NaN", "NaN","Infinity", "-Infinity"
empty array "[]"
character vector String
character array Array of String
empty character array
cell scalar Array
cell vector Array, reshaped to row vector
cell array Array, flattened to row vector
struct scalar Object
struct vector Array of Object, reshaped to row vector
struct array nested Array of Object
classdef object Object

示例:

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数据类型
Boolean scalar logical
Number scalar double
String vector of characters
Object 标量结构体(从于matlab_lang_makeValidName
null, inside a numeric array NaN
null, inside a non-numeric array 空双数组[]
Array, of different data types cell array
Array, of Booleans logical array
Array, of Numbers double array
Array, of Strings 字符向量的元胞数组(cellstr)
Array of Objects, same field names struct array
Array of Objects, different field names cell array of scalar structs

示例:

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.

广告

版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2