我尝试从响应Web服务解析对象,具有以下结构:
{ "idRonda":"1",
"puntos":{
"p1":{"id":1,"descripcion":"punto uno","tag":"0497e1b13e0280"},
"p2":{"id":2,"descripcion":"punto dos","tag":"0498e9b13e0280"},
"p4":{"id":4,"descripcion":"punto cuatro","tag":"04419092432f80"},
"p5":{"id":5,"descripcion":"punto cinco","tag":"0462f812b82a80"},
"p3":{"id":3,"descripcion":"punto tres","tag":"046cfd92432f80"}
}
}
所以,我尝试迭代“数组”puntos,然后我执行以下操作:
//data has the response from web service
var json = JSON.parse(data);
var puntos = json.puntos; //until here it's ok
当我打印puntos的值和类型时:
console.log( " Puntos Object : "+ puntos );
console.log( " TypeOf : "+ Ember.typeOf(puntos) );
输出:
Puntos Object : [object Object]
TypeOf : string
我的尝试:
for (var k in puntos)
{
// I thought that k must be "p1", "p2"..., but I'm wrong
if (puntos.hasOwnProperty(k))
{
var values = puntos[k];
var id = values['id'];
}
}
如果我打印出k值(我不知道它是什么意思):
key: 0
key: 1
.
.
.
key: 13
key: 14
key: fmt
key: w
key: loc
key: camelize
key: decamelize
key: dasherize
key: underscore
key: classify
key: capitalize
key: htmlSafe
现在如何迭代puntos对象以获得id
,descripcion
和tag
值?
更新
var puntos = json.puntos;
var db = window.sqlitePlugin.openDatabase("Rondas", "1.0", "Dev", -1);
db.transaction(function(tx)
{
tx.executeSql("SELECT * from Punto;", [], function(tx, res)
{
if( res.rows.length === 0)
{
for (var k in puntos)
{
if (puntos.hasOwnProperty(k))
{
var id = puntos[k].id;
var descripcion = puntos[k].descripcion;
var tag = puntos[k].tag;
console.log( "KEY: "+k+" ,ID: "+id + " ,DESCRIPCIÓN: "+descripcion+" ,TAG: "+tag );
}
}
}
}
}
上面的代码失败,因为对象puntos
丢失了范围,因为它在回调中然后只有解决方案才能确保对象上下文。
解决方案
db.transaction(function(tx)
{
//ensure the object context.
var points = puntos;
tx.executeSql("SELECT * from Punto;", [], function(tx, res)
{
if( res.rows.length === 0)
{
for (var k in points)
{
...
}
}
}
}
答案 0 :(得分:1)
使用像这样的for循环
for(key in puntos)
{
var id = puntos[key].id;
var descripcion= puntos[key].descripcion;
var tag = puntos[key].tag;
}