function all_data = parseNodeFile(fname)

if nargin < 1
    fname = 'Temp\nodes.txt';
end

%% read file
fid=fopen(fname,'r');
all_lines=[];
tline=fgetl(fid);
while ischar(tline)
    all_lines{end+1} = tline;
    tline=fgetl(fid);
end
fclose(fid);

%% parse the file
all_data=[];
for Iline=1:length(all_lines)
    data=[];
    line = all_lines{Iline};
    
    %find start
    I=find(line == '{');
    if ~isempty(I);
        line=line(I(1)+1:end);
        
        %find end of field
        I=find(line == ',');
        field_count = 0;
        while ~isempty(I)
            %get entry and remove from line
            entry = line(1:I(1)-1);
            line = line(I(1)+1:end);
            
            %parse entry
            I=find(entry == ':');
            if ~isempty(I)
                field_count = field_count+1;
                fieldname = entry(1:I(1)-1);
                fieldname = fieldname(2:end-1); %remove quotes
                
                value = entry(I(1)+1:end);
                if (field_count == 2) & (fieldname == 'data')
                    expected_value = '{"defaults":{"name":{"value":"new"}}';
                    if (value(2+[1:length('defaults')])=='defaults')
                        %this is good.  "line" is OK.
                    else
                        %push value back onto line
                        line = [value(2:end) ',' line];
                    end
                    value = expected_value;
                else
                    value = stripOffStartEndQuotes(value);
                end
                
                %make correction if this was the last entry
                if isempty(line)
                    %strip off the curly braces
                    while (value(end) == '}'); value = value(1:end-1); end;
                    value = stripOffStartEndQuotes(value);
                end
                
                %save this value
                data.(fieldname) = value;
                
                
            end
            I=find(line == ',');
            if ~isempty(I)
                J=find(line == '"');
                if isempty(J)
                    %I is the comma at the end of the line, not a seperator of entries.
                    %reject it
                    I=[];
                end
            end 
        end
        
        %get the last entry
        I=find(line == '}');
        if ~isempty(I);
            entry = line(1:I(1)-1);
            I=find(entry == ':');
            
            fieldname = entry(1:I(1)-1);
            fieldname = fieldname(2:end-1); %remove quotes
            
            value = entry(I(1)+1:end);
            I = find(value == '"');
            if (length(I) >= 2)
                value = value(2:end-1); %remove quotes;
            end
            data.(fieldname) = value;
        end
        
        %save the data
        if isempty(all_data)
            all_data = data;
        else
            all_data(end+1) = data;
        end
    end
end

return

%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%5555
function value = stripOffStartEndQuotes(value)

I = find(value == '"');
if length(I) >= 2
    if (I(1) == 1) & (I(end)==length(value))
        value = value(2:end-1); %remove quotes;
    end
end