2014-11-06 262 views
7

我想從Matlab的json文件中讀取數據,並將所有內容作爲對象存儲在「數據」中。導入之後,如果對象中可用,我需要遍歷所有值並提取特定值。用Matlab讀取JSON對象

JSON(來源):

{ 
    "eid": 44000, 
    "dpm_id": { 
     "dpm": "fm", 
     "pwr": "main" 
    }, 
    "fpga_id": 3189637128, 
    "fpga_ver": 3104379702, 
    "boot_id": 0, 
    "pbs_ver": "PBS 2012-05-07 16:41" 
} 
{ 
    "sid": 1, 
    "hk1": { 
     "bela_mode": "pbs_mode", 
     "pbs_version": "version 1.3", 
     "scet": "2038-01-19T03:14:08", 
     "ref_time": "0:00:00", 
     "tc_received": 2, 
     "tc_exec": 2, 
     "tc_err_ack": 0, 
     "tc_err_exec": 1, 
     "tm_total": 1, 
     "tm_sent": 1, 
     "tm_dropped": 0, 
     .... 

Matlab的(進口,according to this website, resp. Class):

fname = 'FileName.json'; 
fid = fopen(fname); 
raw = fread(fid,inf); 
str = char(raw'); 
fclose(fid); 

data = JSON.parse(str) 

問題/疑問:

正如你看到的,只有Matlab的讀取第一個的內容括號/場。如何導入所有括號/字段,即使我不知道有多少個字段?

data = 

     eid: 44000 
     dpm_id: [1x1 struct] 
    fpga_id: 3.1896e+09 
    fpga_ver: 3.1044e+09 
    boot_id: 0 
    pbs_ver: 'PBS 2012-05-07 16:41' 

謝謝!

+2

看看這裏:http://iso2mesh.sourceforge.net/cgi-bin/index.cgi?jsonlab 來源:https://github.com/fangq/jsonlab – 0xMB 2014-11-06 19:00:41

+0

解析json的一些可能性:http ://undocumentedmatlab.com/blog/json-matlab-integration – Daniel 2015-07-07 14:13:13

回答

2

你可以嘗試使用另一個json庫進行解析,比如this one on file exchange

或者,您可以嘗試一些this site上列出的方法,例如使用matlab的Java和.NET集成和加載其一個json庫。

作爲第三種替代方法,由於上面顯示的方法將愉快地加載字符串中的第一個對象,因此可以隨時對字符串進行一些手動預解析,將其分別包含單個對象的單元數組,然後解析這些。

4

如果你的文件通過httphttps是訪問,您可以從Data Import and Export工具箱使用webread功能。它會自動將JSON文件轉換爲Matlab結構。

有工具箱(MATLABROOT/toolbox/matlab/external/interfaces/webservices/restful/private/decodeJSON.m)一decodeJSON功能,但幫助中明確指出:

% FOR INTERNAL USE ONLY -- This function is intentionally undocumented 
% and is intended for use only within the scope of functions and classes 
% in toolbox/matlab/external/interfaces/webservices/restful. Its behavior 
% may change, or the class itself may be removed in a future release. 

不過你可以在內容中獲取靈感,以建立自己的解決方案。很遺憾Mathworks沒有在工具箱之外提供這個程序。

最好

6

你正試圖讀取一個json文件,這是無效的。我建議使用jsonlint進行快速驗證。

您的JSON看起來像

{ 
    "skipped":"A"  
} 
{ 
    "skipped":"B" 
} 

這不是一個有效的語法,因爲它描述了兩個對象。在第一個}之後,解析器期望文件結束,因爲json文件包含一個對象。

可能的修補程序是:

[ 
    { 
     "skipped": "A" 
    }, 
    { 
     "skipped": "B" 
    } 
] 

{ 
    "aa": { 
     "skipped": "A" 
    }, 
    "bb": { 
     "skipped": "B" 
    } 
} 
+0

這解決了我的問題。即使使用webread函數,也必須關心這個語法。 – Tik0 2015-09-07 09:46:14

0

如果你只是想讀取整個JSON文件到MATLAB,並有一個C++編譯器11,可以使用非常快json_read mex函數。