MATLAB从struct转换为JSON的错误转换

时间:2016-09-08 14:09:31

标签: json matlab

我想使用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是错误的吗?

1 个答案:

答案 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')}