用于Matlab的快速JSON解析器

时间:2014-10-17 08:15:24

标签: json matlab parsing

你知道一个非常快的JSON Parser for Matlab吗?

目前我正在使用JSONlab,但是使用更大的JSON文件(我的是12 MB,500 000行),它真的很慢。或者你有任何提示'对我来说要加快速度?

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

4 个答案:

答案 0 :(得分:3)

如果你想要快,可以使用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')

答案 1 :(得分: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,

答案 2 :(得分:0)

如果您只想阅读JSON文件并拥有C ++ 11编译器,则可以使用非常快速的json_read mex函数。

答案 3 :(得分:0)

从 Matlab 2016b 开始,您可以使用 jsondecode

我没有将其性能与其他实现进行比较。 根据个人经验,我可以说它并不慢。