2017-09-13 72 views
1

使用MATLAB jsonencode函数时,似乎很难将大小1的数组转换为正确的JSON格式,即[值]。例如,如果我这样做:使用带有长度为1的数组的jsonencode

jsonencode(struct('words', [string('hello'), string('bye')])) 

那么这将产生:

{"words":["hello","bye"]} 

这是正确的。然而,如果我做的:

jsonencode(struct('words', [string('hello')])) 

然后它产生:

{"words":"hello"} 

失去了方括号,它需要,因为它是在普通的数组。使用单元格而不是数组时,会发生同样的情况,但如果单元格不在结构内部,则使用单元格可以工作。

任何想法如何解决这个问题?

+1

该问题与matlab在单个值和1x1矩阵之间没有区别的事实有关。 – m7913d

+0

我想最简单的方法是在你的字符串的末尾添加一个垃圾/临时单词,以确保它有多个单词,迫使MATLAB使用方括号。然后在JSON中删除后处理中的垃圾单词。更困难的方法是读取单元格输出并在适当的位置用方括号重写;可能需要一个正则表达式。 – Adriaan

+0

该结构会自动转换为JSON作为http请求的一部分,因此我必须更改代码以在客户端执行JSON转换,并以字符串而不是结构形式传递数据。所以我想这可能会很麻烦。 – Simmovation

回答

2

看来这可以通过使用单元而不是数组来解决,然后不会创建内联结构。像

s.words = {'hello'}; 
jsonencode(s) 

输出:

{"words":["hello"]} 

创建内嵌MATLAB的细胞功能实际上是试图使多个结构,而不是多个字符串时,我相信。请注意,这仍然不能与数组一样工作,因为matlab将一个第一个数组视为标量。