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值将转换为无效的在输出中。如果为false,则它们将保持为原始值。此参数的默认值为true。

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

编程说明:

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

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

Octave数据类型 JSON数据类型
逻辑标量 布尔值
逻辑向量 布尔数组,重塑为行向量
逻辑数组 嵌套布尔数组
数字标量 数字
数字向量 数字数组,重塑为行向量
数字数组 嵌套的数字数组
NaN, NA, Inf, -Inf
什么时候ConvertInfAndNaN”=true
无效的
NaN, NA, Inf, -Inf
什么时候ConvertInfAndNaN”=false
NaN, NaN,无穷, 无穷
空数组 []
字符向量 一串
字符数组 字符串数组
空字符数组
数组标量 数组
元胞载体 数组,重塑为行向量
元胞数组 数组,展平为行向量
结构体标量 对象
结构体向量 对象数组,重塑为行向量
结构体数组 嵌套的对象数组
classdef对象 对象

示例:

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

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

##单引号字符串中的转义符sonencode('\0\a\b\t\tn\v\f\r')⇒ “\\0\\a\\b\\t\\n\\v\\f\\r

##双引号字符串中的转义符sonencode(“\a\b\tn\v\f\r”)⇒ “\u0007\b\t\t \u000B\f\r

jsonencode([true;false],“PrettyPrint”,true)⇒ ans=[真,假]

jsonencode(['fo','bar';'foo','bal'])⇒ [“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({'fo';'bar';{'for';'bar'}})⇒ [“foo”,“bar”,[“foo”,“bar”]]

jsonencode(containers.Map({'fo';'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.

有关参数的更多信息替换样式前缀详见matlab.lang.makeValidName.

如果参数的值makeValidName为false,则名称将不会被更改matlab.lang.makeValidName替换样式前缀参数将被忽略。

注意:解码和编码JSON文本不能保证再现原始文本,因为某些名称可能会被更改matlab.lang.makeValidName.

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

JSON数据类型 Octave数据类型
布尔值 标量逻辑
数字 标量二重
一串 字符向量
对象 标量结构体(从于matlab_lang_makeValidName
null,在数字数组内 NaN
null,在非数字数组内 空双数组[]
数组,不同数据类型 元胞数组
数组,布尔值 逻辑数组
数组,个数 双数组
数组,字符串 字符向量的元胞数组(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]={[11,1]=foo<2,1]=bar}}

jsondecode('{“nu#m#ber”:7,“s#tr#ing”:“hi”}',…'ReplacementStyle','delete')⇒ 包含字段的标量结构体:数字=7字符串=hi

jsondecode('{“nu#m#ber”:7,“s#tr#ing”:“hi”}',…'makeValidName',false)⇒ 包含字段的标量结构体:nu#m#ber=7 s#tr#ing=hi

jsondecode('{“1”:“one”,“2”:“two”}','前缀','m_')⇒ 包含字段的标量结构体:m_1=一m_2=两

详见: jsonencode, matlab.lang.makeValidName.


版权所有 © 2024 Octave中文网

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