Skip to content

Commit c43de36

Browse files
committed
[opt] drop circular dependency between jdict and jsonpath
1 parent 8f13a68 commit c43de36

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

jsonpath.m

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@
5454
error(['data with a jsonpath ' jpath ' does not exist']);
5555
end
5656
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});
5959
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});
6262
end
63-
obj = datastack{1}.v();
63+
obj = datastack{1};
6464
end
6565
end
6666

@@ -202,3 +202,13 @@
202202
elseif (nargout > 1)
203203
isfound = true;
204204
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

Comments
 (0)