|
54 | 54 | error(['data with a jsonpath ' jpath ' does not exist']); |
55 | 55 | end |
56 | 56 | end |
57 | | - idx = struct('type', '.', 'subs', paths{end}{1}(2:end)); |
58 | | - datastack{end - 1} = subsasgn(jdict(datastack{i}), idx, varargin{1}); |
| 57 | + fieldname = paths{end}{1}(2:end); |
| 58 | + datastack{end - 1} = setfield_safe(datastack{end - 1}, fieldname, varargin{1}); |
59 | 59 | for i = length(paths) - 1:-1:1 |
60 | | - idx = struct('type', '.', 'subs', paths{i}{1}(2:end)); |
61 | | - datastack{i} = subsasgn(jdict(datastack{i}), idx, datastack{i + 1}.v()); |
| 60 | + fieldname = paths{i}{1}(2:end); |
| 61 | + datastack{i} = setfield_safe(datastack{i}, fieldname, datastack{i + 1}); |
62 | 62 | end |
63 | | - obj = datastack{1}.v(); |
| 63 | + obj = datastack{1}; |
64 | 64 | end |
65 | 65 | end |
66 | 66 |
|
|
202 | 202 | elseif (nargout > 1) |
203 | 203 | isfound = true; |
204 | 204 | end |
| 205 | + |
| 206 | +function data = setfield_safe(data, fieldname, value) |
| 207 | +if isstruct(data) |
| 208 | + data.(fieldname) = value; |
| 209 | +elseif isa(data, 'containers.Map') || isa(data, 'dictionary') |
| 210 | + data(fieldname) = value; |
| 211 | +else |
| 212 | + idx = struct('type', '.', 'subs', fieldname); |
| 213 | + data = subsasgn(data, idx, value); |
| 214 | +end |
0 commit comments