你知道一个非常快的JSON Parser for Matlab吗?
目前我正在使用JSONlab,但是使用更大的JSON文件(我的是12 MB,500 000行),它真的很慢。或者你有任何提示'对我来说要加快速度?
P.S。 JSON文件是最大的。 3层深。
答案 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
。
我没有将其性能与其他实现进行比较。 根据个人经验,我可以说它并不慢。