图片缩略图

JSON解析器

版本1.2.0.1 (2.4 KB) 芬斯特拉乔
将JSON字符串解析为结构和单元格
3.7
23日评级

35下载

更新2016年9月01日

视图版本历史

查看许可协议

这个函数解析JSON字符串。它将JSON数组转换为单元格数组,将JSON对象转换为结构。
这可以用于返回JSON数据的webservices,比如谷歌提供的API®

一个使用的例子是:
google_search = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=matlab';
matlab_results = parse_json (urlread (google_search));
disp (matlab_results {1} .responseData.results {1} .titleNoFormatting)
disp (matlab_results {1} .responseData.results {1} .visibleUrl)

引用作为

乔尔·芬斯特拉(2021)。JSON解析器(//www.tatmou.com/matlabcentral/fileexchange/20565-json-parser), MATLAB中央文件交换。检索

意见及评分(34

托马斯。

大卫Fardis

你好……这个不错…但是在网上工作很容易。https://jsonparser.net/

架Jeen

你好朋友,

不错的工具……但如果你想只使用一次就直接使用http://jsonparser.org/http://jsonparser.org/ http://jsonparser.org/ " > < />这个工具。

谢谢。

Zeynab Mousavikhamene

奥利弗·浮士德

亲爱的乔,

请考虑提供一份修改后的名称清单。请看下面提供该列表的肮脏黑客。
函数[data json] = parse_object(json)
全球modifiedList
数据= [];
虽然~ isempty (json)
id = json (1);
json (1) = [];

开关id
case '"' %启动名称/值对
[name value remaining_json] = parse_name_value(json);
如果isempty(名称)
ME = MException('json:parse_object',['不能有一个空名称:'json]);
ME.throw;
结束
[N, modified] = matlab.lang.makeValidName(name);
数据。(N) =价值;
如果修改
modifiedList{结束+ 1}= {N名称}
结束
json = remaining_json;

case '}' %对象结束,退出函数
返回

否则%忽略其他字符
结束
结束
结束

奥兰多在坠毁

虹膜Panabaker

喜欢这个工具,并愿意建议其他工具,这将是有帮助的。https://jsonformatter.org/json-parser

埃里克

witzgf

正如Joel Feenstra所指出的,这段代码没有针对速度进行优化。大量的数据复制需要n^2的时间复杂度。侧写,主要的违法者之一就是指令

json (1) = [];

最终将整个JSON字符串复制到减去第一个字符后的新内存块中。在代码的其他部分中也有类似的实例。我强烈建议不要在长度超过10^5字符的字符串上使用这种实现。除此之外,我没有遇到任何问题。

詹妮弗•鲍曼

我如何使用这个文件,如果我有一个。json文件保存的所有数据,我想转换为。mat?

谢谢!

福尔克民谣

这个函数非常有用。这节省了我很多时间!非常感谢!

我注意到,如果JSON包含一个空数组在另一个数组中,就会中断当前的实现,如“experiment={"name": value, "array":[[1,2,3],[]]}。

桑杰马诺

太好了。然而,这妨碍了以下划线开头的名称。

Srdjan

使用beaqlejs生成的JSON文件崩溃。

Matlab2010

我偶尔会遇到这样的问题:

警告:控制字符“\%”无效。请参阅'doc sprintf'查看格式字符串中有效的控制字符。
>parse_string在151
parse_json中的>parse_value为31
在parse_json>中parse_name_value为128
parse_json中的>parse_object为102
parse_json中的>parse_value为34
parse_json在16
在twitty > twitty。parseTwitterResponse在434
在twitty > twitty。callTwitterAPI在2014
在twitty>中,twitty. friendshipscreate at 1211

Alceu科斯塔

迈克尔·韦德曼

它所做的正是它所声称的:对于我来说,快速解析谷歌地理编码API的结果是完美的,没有任何麻烦。谢谢你,乔!

Adeola Bannis

Yohai

不处理不正确的json文件,可能会陷入无限循环。

例如,试着

p = parse_json(“a”:1)

阿施施dabral

你好,我使用这个解析器来解析包含base64字符串的图像的JSON。显然,如果base64小于100kb,那么图像很容易解析,但如果图像字符串很大,比如一张大约1mb大小的图像,matlab需要很长时间来处理它。是json解析器还是urlread减慢了进程。我只是收到一条忙碌的消息(等待我的图像处理超过一个小时)

苏雷什Deoda

谢谢

看看约翰纳什

非常有用的工具,工作如描述。感谢您简化了解析web API返回的数据。

千千方

供参考,一个基于这项工作的优化JSON解析器JSONlab可以在

//www.tatmou.com/matlabcentral/fileexchange/33381

它的速度是10到100倍。JSONlab还提供了一个JSON编码器。

鄱阳湖高

这个版本不能处理带有空元素的JSON文件。试一试//www.tatmou.com/matlabcentral/fileexchange/23393相反(也快)。

本杰明Ting

如果第一个{前面有空格(空格或回车),此代码就不能工作。

丹的女性

效果不错,虽然有点慢。也许可以通过仔细应用“正则表达式”来加快速度。另外,在使用脚本时,请确保JSON字符串是char的行向量。如果string是char的列向量,则可能发生错误。

阿施施Uthama

汉Oostdijk

谢谢乔,

这正是我所需要的,而且很好用。

帕特里克Boert

谢谢你,乔尔,我想也许有个简单的解决办法,你可以告诉我。但是新文件解决了这个问题,速度快了一些。无论如何,谢谢你的工作。

芬斯特拉乔

我知道代码很慢,我没有试图让代码更快,只是正确。François的版本似乎更快,所以如果您需要速度(并且有很多字符串),使用他的。

弗朗索瓦Glineur

另一种可以更快地处理字符串的解析器可以在//www.tatmou.com/matlabcentral/fileexchange/23393
(另一个JSON解析器)。例如,运行上面的示例

公司= parse_json (urlread (http://api.crunchbase.com/v/1/companies.js'));

现在只需不到30秒。

帕特里克Boert

喂乔,

谢谢你的工作!

我试图查询Chruchbase API,它似乎工作良好。然而,有些查询需要很长时间才能被解析,例如:I quit

公司= parse_json (urlread (http://api.crunchbase.com/v/1/companies.js'));

后1小时。侧写师是这么说的

json (1) = [];在parse_json > parse_string
json (1) = [];在parse_json > parse_object

约占计算成本的90%。有什么简单的方法吗?

最好的
帕特里克

芬斯特拉乔

谷歌API将其限制为4个结果。你可以使用“cursor”信息来获取更多的结果

港口追踪

干得好!
BTW -任何原因为什么它只返回4值对象从谷歌?是因为ajax api吗?

谢谢,

港口

MATLAB版本兼容性
创建R2007b
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区可以如何帮助您!

开始狩猎!