2014-10-17 111 views
2

您是否知道用於Matlab的非常快速的JSON解析器?用於Matlab的快速JSON解析器

目前我使用的是JSONlab,但更大的JSON文件(我的是12 MB,500 000行)非常慢。或者你有什麼提示可以提高速度?

P.S. JSON文件是最大的。 3層深。

回答

2

如果您想快點,可以使用Java JSON parser。 而這個答案失控之前,我要發佈的東西,我放下至今:

clc 

% input example 
jsonStr = '{"bool1": true, "string1": "some text", "double1": 5, "array1": [1,2,3], "nested": {"val1": 1, "val2": "one"}}' 

% use java.. 
javaaddpath('json.jar'); 
jsonObj = org.json.JSONObject(jsonStr); 

% check out the available methods 
jsonObj.methods % see also http://www.json.org/javadoc/org/json/JSONObject.html 

% get some stuff 
b = jsonObj.getBoolean('bool1') 
s = jsonObj.getString('string1') 
d = jsonObj.getDouble('double1') 
i = jsonObj.getJSONObject('nested').getInt('val1') 

% put some stuff 
jsonObj = jsonObj.put('sum', 1+1); 


% getting an array or matrix is not so easy (you get a JSONArray) 
e = jsonObj.get('array1'); 

% what are the methods to access that JSONArray? 
e.methods 

for idx = 1:e.length() 
    e.get(idx-1) 
end 

% but putting arrays or matrices works fine 
jsonObj = jsonObj.put('matrix1', ones(5)); 

% you can get these also easily .. 
m1 = jsonObj.get('matrix1') 
% .. as long as you dont convert the obj back to a string 
jsonObj = org.json.JSONObject(jsonObj.toString()); 
m2 = jsonObj.get('matrix1') 
+0

忘了提及您必須將'json.jar'添加到javaclasspath中。可以下載實例[這裏](http://mvnrepository.com/artifact/org.json/json/20140107)。更新了答案。 – MeMyselfAndI 2014-10-17 12:09:54

0

如果你能負擔得起調用.NET代碼,你可能想看看在這個輕量級男人(我是作者):

https://github.com/ysharplanguage/FastJsonParser#PerfDetailed

巧合的是,我的基準包括在12MB球場測試(「父親數據」)正是(和深度也是一對夫婦的水平),這解析器解析在便宜的筆記本電腦上,在250毫秒以內進入POCO。

對於MATLAB + .NET代碼的集成:

http://www.mathworks.com/help/matlab/using-net-libraries-in-matlab.html

「HTH,

0

如果你只是想讀取JSON文件,並有一個C++編譯器11,就可以使用非常快的json_read mex功能。