MATLAB: Does jsonencode parser does not remove exponential notations when format longG is used

formatting cell arrayjsondecode cell arraysjsonencodematlab2018

I would like to save a structured data in a JSON file. There are various structured array elements that has integer number that needs to be represented without any exponents in the notation.
The following is an example commands that formats correctly as per my requirement on command window. But formats with exponent notation after saving to a json file.
Example:
% Command Window output
>> clear all
>> format long g
>> university.department.EEE.studentID = {122323259857567}
university =
struct with fields:
department: [1x1 struct]
>> university.department.EEE.studentID
ans =
1x1 cell array
{[122323259857567]}
% When I write it to JSON File the cell array now saves the above studentID with exponents
>>jsonData = jsonencode(university);
saveFileName = [filePath, '/', 'student1.json'];
fileId = fopen(saveFileName, 'w');
if fileId== -1, error('Cannot create JSON file');end
fwrite(fileId, jsonData, 'char');
fclose(fileId);
% student1.json now has :
% {
% "department":
% "EEE": {
% studentID: {[1.223232598575670e+14]}


% studentName: "XYZ YUI"
%

% }

% "ECE":{
% studentID: {[1.223232598575670e+14]}
% studentName: "sdf YUI"
%
% }
% "CS":{
% studentID: {[1.223232598575670e+14]}
% studentName: "ABC YUI"
% }
% }
%

%

Best Answer

The straightforward answer to your question is simple. format has nothing to do with jsonencode, it only affects display at the matlab command prompt. I'm not sure why you thought it would affect jsonencode. Nowhere does it say that.
As for your problem, the json specs does not specify how numbers should be encoded as text in the json, so matlab is perfectly within its right to encode the way it does. Note that 122323259857567 and 1.223232598575670e+14 are exactly the same number, so a conformant decoder that can decode numbers of that magnitude (not guaranteed but very likely) will decode them properly.
Now, there is a way to force matlab to write integers less than 18446744073709551615 without using scientific notation by converting them to uint64, but again, there is nothing wrong with the way matlab currently encodes the numbers.
>> university.department.EEE.studentID = uint64(122323259857567); %not sure why you were using a cell array
>> jsonencode(university)
ans =
'{"department":{"EEE":{"studentID":122323259857567}}}'