2017-09-13 75 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將一個第一個數組視爲標量。