get rid of the ugly trick eval(parse()), and use a plain loop to create a nested list