MATLAB: JSON vs. XML using webread()

jsonweb services

I have a url that I am able to get data when I set the output to xml as an optional parameter in the url, but when I set it to json, I get NaN… the url is 'http://api.eia.gov/series/?api_key=####&series_id=NG.RNGC1.D&out=json' where #### is a private key. Any ideas? I am able to get a struct array when I use the World Bank Climate example in Matlab help documentation.

Best Answer

The JSON text received from the web service contains the UTF-8 byte order mark (BOM), , at the beginning [1]. The BOM is causing the JSON parser to fail. You can see the BOM by calling webread with a content type of text.
>> url = 'http://api.eia.gov/series/?api_key=####&series_id=NG.RNGC1.D&out=json';
>> webread(url, weboptions('ContentType', 'text'))
ans =
{"request":{"command":"series"},"data":{"error":"No api_key. For key registration, documentation, and examples see http:\/\/www.eia.gov\/developer\/"}}
>>
[1] See byte order mark for UTF-8 encoding in Representation of byte order marks by encoding
Related Question