fijate que estas creando un objeto literal en la invocacion de append donde el token -o nombre de la propiedad- tu intentas que sea el resultado de una expresion. pero javascript no lo interpreta de esa forma. en objetos literales el token tiene que ser estrictamente caracteres validos para identificadores, o en caso de tener caracteres invalidos entre comillar el token. para que el token sea el resultado de una expresion tienes que crear primero el objeto y luego utilizar la sintaxis de corchete.
Código:
var obj = {};
obj[expresion] = valor;