我想使用MATLAB的webwrite功能与Web服务器通信。这是我发现的问题:
想象一个像这样的结构:带有3个字段的1x1结构
test1x1 =
a: 'a'
b: 'b'
c: 'c'
注意test1x1
是1x1结构,包含3个字段
现在我有另一个结构,让我们称之为test1x2
,这个是一个 1x2结构,有3个字段
test1x2 =
1x2 struct array with fields:
a
b
c
>> test1x2(1)
ans =
a: 'a'
b: 'b'
c: 'c'
>> test1x2(2)
ans =
a: 'a2'
b: 'b2'
c: 'c2'
现在我想将test1x1
作为JSON发送到我的网络服务器
response = webwrite('aURL',test1x1 , weboptions('MediaType','application/json'));
如果您使用调试器,在webwrite
函数中的某个位置,您可以看到将发送到服务器的纯JSON,这里是生成的JSON:
{"a":"a","b":"b","c":"c"}
现在,test1x2
将生成以下JSON:
[{"a":"a","b":"b","c":"c"},{"a":"a2","b":"b2","c":"c2"}]
现在问题是,在网络服务器中,从test1x1
生成的JSON的解释是它有3个条目,每个1个字段。因为MATLAB不会在生成的JSON的前面和末尾添加[]
作为1x1结构。
从test1x2
生成的JSON的解释是正确的并且符合预期:2个条目,每个3个字段
现在,你不认为生成的1x1结构的JSON是错误的吗?
答案 0 :(得分:2)
这里确实有一点含糊之处:Matlab没有“一元素数组”的概念,Matlab将这些实体视为标量。因此,您希望将[struct('a','a','b','b','c','c')]
(具有单个struct元素的列表)转换为json,但matlab看到的是struct('a','a','b','b','c','c')
(标量结构元素)。
我想你可以通过强制标量作为单元格数组中的项来解决它:{struct('a','a','b','b','c','c')}
。