Javascript 嵌套在回调中的JSONParse数组丢失了上下文

Javascript 嵌套在回调中的JSONParse数组丢失了上下文,javascript,json,Javascript,Json,我尝试从响应web服务解析一个对象,该对象具有以下结构: {“idRonda”:“1”, “puntos”:{ “p1”:{“id”:1,“description”:“punto uno”,“tag”:“0497e1b13e0280”}, “p2”:{“id”:2,“description”:“punto-dos”,“tag”:“0498e9b13e0280”}, “p4”:{“id”:4,“description”:“punto cuatro”,“tag”:“04419092432f80”},

我尝试从响应web服务解析一个对象,该对象具有以下结构:

{“idRonda”:“1”,
“puntos”:{
“p1”:{“id”:1,“description”:“punto uno”,“tag”:“0497e1b13e0280”},
“p2”:{“id”:2,“description”:“punto-dos”,“tag”:“0498e9b13e0280”},
“p4”:{“id”:4,“description”:“punto cuatro”,“tag”:“04419092432f80”},
“p5”:{“id”:5,“descripcion”:“punto cinco”,“tag”:“0462f812b82a80”},
“p3”:{“id”:3,“description”:“punto tres”,“tag”:“046cfd92432f80”}
}
}
因此,我尝试迭代“数组”punto,然后执行以下操作:

//数据具有来自web服务的响应
var json=json.parse(数据);
var puntos=json.puntos//直到这里,一切都好
打印Punto的值和类型时:

console.log(“Puntos对象:+Puntos”);
控制台日志(“类型:”+Ember.TypeOf(puntos));
输出:

Puntos Object : [object Object]
TypeOf : string
我的尝试:

for(puntos中的变量k)
{
//我以为k一定是“p1”,“p2”…,但我错了
if(puntos.hasOwnProperty(k))
{  
var值=puntos[k];
变量id=值['id'];
}
}
如果我打印得到的k值(我不知道这是什么意思):

现在,如何迭代puntos对象以获得
id
description
tag

更新:

var puntos=json.puntos;
var db=window.sqlitePlugin.openDatabase(“Rondas”、“1.0”、“Dev”、-1);
数据库事务(功能(tx)
{
tx.executeSql(“从Punto中选择*”,[],函数(tx,res)
{
if(res.rows.length==0)
{
for(puntos中的变量k)
{
if(puntos.hasOwnProperty(k))
{
var id=puntos[k].id;
变量descripion=puntos[k]。descripion;
var tag=puntos[k].tag;
日志(“键:+k+”,ID:+ID+,描述符:+Description+”,标记:+TAG);
}
}
}
}
}
上面的代码失败是因为对象
puntos
丢失了作用域,因为它位于回调中,那么唯一的解决方案是确保对象上下文

解决方案

db.事务(功能(tx)
{
//确保对象上下文正确。
var points=puntos;
tx.executeSql(“从Punto中选择*”,[],函数(tx,res)
{
if(res.rows.length==0)
{
用于(以点为单位的变量k)
{
...
}   
}
}
}

使用这样的for循环

for(key in puntos)
{
   var id = puntos[key].id;
   var descripcion= puntos[key].descripcion;
   var tag = puntos[key].tag;
}

很好,只是你的描述拼写与原始代码不同。@SteveWellens谢谢!我更新了itThanks@Khalid,但不起作用,我得到了所有值的
未定义的
。@CristianChaparroA。它对我很好,你在问题上发布的循环对我也很好……我不知道问题出在哪里(puntos中的var k)
k是“p1”、“p2”、“p3”…在解析数据之前,请尝试将数据打印为字符串,以查看问题出在哪里
for(key in puntos)
{
   var id = puntos[key].id;
   var descripcion= puntos[key].descripcion;
   var tag = puntos[key].tag;
}