jsonencode
基于结构化 MATLAB 数据创建 JSON 格式的文本
说明
txt = jsonencode(
使用一个或多个名称-值对组参量对 data
,Name,Value
)data
属性进行编码。
示例
输入参数
局限性
jsonencode
不支持复数数组或稀疏数组。对象必须具有编码为名称-值对组的公共属性,且对象属性上定义了get
方法。jsonencode
不支持隐藏属性。jsonencode
不支持递归结构体,例如包含对父对象和子对象的引用的图形对象。如果您对某个值进行编码,然后又进行解码,MATLAB 不能保证数据类型保持不变。JSON 支持的数据类型比 MATLAB 少,这会造成类型信息丢失。例如,JSON 数据不区分
double
和int32
。如果您对某个int32
值进行编码,然后调用jsondecode
,解码后的值的类型将为double
。MATLAB 不能保证数组的形状保持不变。例如,1×N 数值向量将编码为数组。如果您调用
jsondecode
,则 MATLAB 会将该数组解码为 N×1 向量。
提示
要保留换行符转义字符
\n
,请使用newline
函数。jsonencode(['one' newline 'two'])
ans = '"one\ntwo"'
要保留其他
\
转义字符,请考虑对输入调用sprintf
。测试输入以查看sprintf
是否创建了所需的结果。jsonencode(sprintf('AB\tCD'))
ans = '"AB\tCD"'
如果输入包含双引号字符
"
,则该函数将插入\
转义字符。jsonencode('one"two')
ans = '"one\"two"'
算法
JSON 支持的数据类型比 MATLAB 少。jsonencode
会将 MATLAB 数据类型转换为下表中列出的 JSON 数据类型。
MATLAB 数据类型 | JSON 数据类型 | 示例 | 输出 |
---|---|---|---|
数组,空 | 数组,空 | jsonencode([]) jsonencode(string.empty) | '[]' |
逻辑标量 | 布尔值 | jsonencode(true) | 'true' |
逻辑向量 | 布尔值数组 | jsonencode([true,false,false]) | '[true,false,false]' |
逻辑数组 | 嵌套的布尔值数组 | jsonencode(logical([0,1,0;1,1,0])) | '[[false,true,false],[true,true,false]]' |
字符向量 | 字符串 | jsonencode('This is a char.')
| '"This is a char."' |
字符数组 | 字符串数组 | jsonencode(['AC';'EG']) | '["AC","EG"]' |
字符串标量 | 字符串 | jsonencode("This is a string.")
| '"This is a string."' |
字符串向量 | 字符串数组 | jsonencode(["AC";"EG"]) | '["AC","EG"]' |
字符串数组 | 嵌套的字符串数组 | jsonencode(["AC","EG";"BD","FH"]) | '[["AC","EG"],["BD","FH"]]' |
空字符向量 | 字符串 | jsonencode('')
| '""' |
| 空值 | jsonencode(string(nan)) | 'null' |
数值标量 | 数值 | jsonencode(2.5) | '2.5' |
数值向量 | 数值数组 | jsonencode(1:3) | '[1,2,3]' |
数值数组 | 嵌套的数值数组 | jsonencode(eye(2)) | '[[1,0],[0,1]]' |
复数 | 不支持 | ||
表 | 对象数组 | Name = {'Jones';'Brown'}; Age = [40;49]; jsonencode(table(Name,Age)) | '[{"Name":"Jones","Age":40},{"Name":"Brown","Age":49}]' |
元胞标量 | 由 1 个元素组成的数组 | jsonencode({5}) | '[5]' |
元胞向量 | 数组 | jsonencode({'a',true,[2;3]})
| '["a",true,[2,3]]' |
元胞数组 | 扁平化为单一维度的数组 | jsonencode({1 2;3 4}) | '[1,3,2,4]' |
结构体标量 | 对象 | jsonencode(struct('a','value')) | '{"a":"value"}' |
结构体向量 | 对象数组 | jsonencode(struct('a',{true,true,false}))
| '[{"a":true},{"a":true},{"a":false}]' |
结构体数组 | 嵌套的对象数组 | ||
日期时间标量 | 字符串(使用 | jsonencode(datetime('tomorrow'))
| '"04-Nov-2016"' |
日期时间向量 | 字符串数组 | DT = datetime({'8 April 2015','9 May 2015'}, ... 'InputFormat','d MMMM yyyy'); jsonencode(DT) | '["08-Apr-2015","09-May-2015"]' |
日期时间数组 | 嵌套的字符串数组 | DT = datetime(... [{'April 2015','May 2015'};{'June 2015','July 2015'}], ... 'InputFormat','MMMM yyyy'); jsonencode(DT) | '[["01-Apr-2015","01-May-2015"], ["01-Jun-2015","01-Jul-2015"]]' |
分类标量 | 字符串(使用 | jsonencode(categorical({'r'})) | '"r"' |
分类向量 | 字符串数组 | jsonencode(categorical({'r';'g';'b'})) | '["r","g","b"]' |
分类数组 | 嵌套的字符串数组 | jsonencode(categorical( ... {'r' 'b' 'g'; ... 'g' 'r' 'b'; ... 'b' 'r' 'g'})) | '[["r","b","g"],["g","r","b"],["b","r","g"]]' |
containers.Map | 对象 | jsonencode(containers.Map( ... {'Jan','Feb','Mar'}, ... [327,368,197])) | '{"Feb":368,"Jan":327,"Mar":197}' |
NaN | 空值 | jsonencode([1,2,NaN,3,Inf]) | '[1,2,null,3,null]' |
枚举 | 字符串 | jsonencode(matlab.lang.OnOffSwitchState.on) | '"on"' |
要将一个标量 MATLAB 对象作为标量 JSON 数组(括在 []
字符中)传递,请使用元胞数组构造运算符 {}
转换该对象。例如,以下代码将 features
字段的值转换为标量 JSON 数组。
S = struct("features", struct("type", "Feature", "geometry",... struct("type", "point", "coordinates", [-105, 40]))); S.features = {S.features}; s = jsonencode(S)
s = '{"features":[{"type":"Feature","geometry":{"type":"point","coordinates":[-105,40]}}]}'