Podrías previamente tomar todos los valores contenidos dentro de los objetos del array contenido en el primer atributo del objeto principal y con ayuda de bucles, los vas insertando en un nuevo array.
Código Javascript
:
Ver originalvar availableTags = {
"datos": [
{
"nombre": "Juan",
"edad": "24",
"extra": {
"estatura": "1.97",
"peso": "45"
}
}
]
},
datos = [];
for (var i in availableTags.datos){
for (var j in availableTags.datos[i]){
if (typeof availableTags.datos[i][j] === "object")
for (var k in availableTags.datos[i][j]){
datos.push(availableTags.datos[i][j][k]);
}
else
datos.push(availableTags.datos[i][j]);
}
}
$("#search").autocomplete({
source: datos
});
En el objeto principal "availableTags", hay un único atributo de nombre "datos", que tiene como valor a un array que contiene un objeto, en dicho objeto, hay 3 atributos, los dos primeros contienen 2 cadenas, mientras que el tercero contiene un objeto con dos atributos con cadenas como valores, por último, declaro un nuevo array.
Con un primer bucle, recorro el array del único atributo del objeto "availableTags", enseguida, recorro dicho array con otro bucle y en cada iteración verifico si el valor de cada atributo es un objeto, de ser así, lo recorro con un tercer bucle y añado cada uno de sus valores al nuevo array, caso contrario, añado los valores del objeto en cuestión al array. Finalmente, designo dicho array (el nuevo) como la fuente de donde se alimentará el autocompletado.
El resultado es este:
http://jsbin.com/bekig/1
Saludos