Skip to content

Commit 011df31

Browse files
committed
[compat] make jsonschema and tests work on MATLAB R2010b
1 parent ae90eea commit 011df31

3 files changed

Lines changed: 22 additions & 12 deletions

File tree

jdict.m

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,12 @@
548548
if (isa(opcell{i}, 'containers.Map') || isa(opcell{i}, 'dictionary'))
549549
idx = struct('type', '()', 'subs', idx.subs);
550550
end
551-
opcell{end - 1} = subsasgn(opcell{i}, idx, otherobj);
551+
try
552+
opcell{end - 1} = subsasgn(opcell{i}, idx, otherobj);
553+
catch
554+
opcell{i}.(idx.subs) = otherobj;
555+
opcell{end - 1} = opcell{i};
556+
end
552557
end
553558
end
554559

@@ -573,7 +578,11 @@
573578
elseif (ischar(idx.subs) && ~isempty(idx.subs) && idx.subs(1) == char(36))
574579
opcell{i} = obj.call_('jsonpath', opcell{i}, idx.subs, opcell{i + 1});
575580
else
576-
opcell{i} = subsasgn(opcell{i}, idx, opcell{i + 1});
581+
try
582+
opcell{i} = subsasgn(opcell{i}, idx, opcell{i + 1});
583+
catch
584+
opcell{i}.(idx.subs) = opcell{i + 1};
585+
end
577586
end
578587
end
579588

@@ -760,7 +769,7 @@
760769

761770
if (isa(schemadata, 'containers.Map'))
762771
obj.schema = schemadata;
763-
elseif (ischar(schemadata) || isstring(schemadata) || isstruct(schemadata))
772+
elseif (ischar(schemadata) || isa(schemadata, 'string') || isstruct(schemadata))
764773
if (isstruct(schemadata))
765774
schemadata = savejson('', schemadata);
766775
end

jsonschema.m

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
% Generation mode: jsonschema(schema) or jsonschema(schema, [])
3434
if nargin == 1 || (nargin >= 2 && isempty(schema))
3535
schemaarg = data;
36-
if ischar(schemaarg) || isstring(schemaarg) || isstruct(schemaarg)
36+
if ischar(schemaarg) || isa(schemaarg, 'string') || isstruct(schemaarg)
3737
if (isstruct(schemaarg))
3838
schemaarg = savejson('', schemaarg);
3939
end
@@ -45,7 +45,7 @@
4545
return
4646
end
4747

48-
if ischar(schema) || isstring(schema) || isstruct(schema)
48+
if ischar(schema) || isa(schema, 'string') || isstruct(schema)
4949
if (isstruct(schema))
5050
schema = savejson('', schema);
5151
end
@@ -112,14 +112,14 @@
112112
if isKey(schema, 'enum')
113113
enumvalues = schema('enum');
114114
match = false;
115-
data_is_empty_str = (ischar(data) && isempty(data)) || (isstring(data) && strlength(data) == 0);
115+
data_is_empty_str = (ischar(data) && isempty(data)) || (isa(data, 'string') && strlength(data) == 0);
116116
for i = 1:length(enumvalues)
117117
enumval = enumvalues{i};
118-
enum_is_empty_str = isempty(enumval) || (isstring(enumval) && strlength(enumval) == 0);
118+
enum_is_empty_str = isempty(enumval) || (isa(enumval, 'string') && strlength(enumval) == 0);
119119
if data_is_empty_str && enum_is_empty_str
120120
match = true;
121121
break
122-
elseif (ischar(data) || isstring(data)) && (ischar(enumval) || isstring(enumval))
122+
elseif (ischar(data) || isa(data, 'string')) && (ischar(enumval) || isa(enumval, 'string'))
123123
if strcmp(char(data), char(enumval))
124124
match = true;
125125
break
@@ -151,7 +151,7 @@
151151
end
152152

153153
% string
154-
if ischar(data) || isstring(data)
154+
if ischar(data) || isa(data, 'string')
155155
[isvalid, errmsg] = validatestring(char(data), schema, path);
156156
if ~isvalid
157157
valid = false;
@@ -263,7 +263,7 @@
263263
case 'number'
264264
ok = isnumeric(data) && isscalar(data);
265265
case 'string'
266-
ok = ischar(data) || isstring(data);
266+
ok = ischar(data) || isa(data, 'string');
267267
case 'array'
268268
ok = iscell(data) || (isnumeric(data) && ~isscalar(data)) || (islogical(data) && ~isscalar(data));
269269
case 'object'
@@ -275,7 +275,7 @@
275275
%% -------------------------------------------------------------------------
276276
function typestr = gettype(data)
277277

278-
if ischar(data) || isstring(data)
278+
if ischar(data) || isa(data, 'string')
279279
typestr = 'string';
280280
elseif isnumeric(data) && isempty(data)
281281
typestr = 'null';

test/run_jsonlab_test.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,8 @@ function run_jsonlab_test(tests)
675675
test_jsonlab('getattr return all attributes', @savejson, jd7.getattr('$.data'), '{"dims":["x","y"],"sampling_rate":1000}', 'compact', 1);
676676
test_jsonlab('getattr get one attr', @savejson, jd7.getattr('$.data', 'dims'), '["x","y"]', 'compact', 1);
677677
test_jsonlab('savejson with _ArrayLabel_', @savejson, jd7, '{"data":{"_ArrayType_":"double","_ArraySize_":[3,4],"_ArrayData_":[1,1,1,1,1,1,1,1,1,1,1,1],"_ArrayLabel_":["x","y"],"sampling_rate":1000}}', 'compact', 1);
678-
test_jsonlab('loadjson with _ArrayLabel_', @savejson, loadjson(jd7.tojson()).data.getattr('$', 'dims'), '["x","y"]', 'compact', 1);
678+
jd7 = loadjson(jd7.tojson());
679+
test_jsonlab('loadjson with _ArrayLabel_', @savejson, jd7.data.getattr('$', 'dims'), '["x","y"]', 'compact', 1);
679680

680681
% Test 12: Multiple attributes different types
681682
jd8 = jdict(rand(10, 20));

0 commit comments

Comments
 (0)