mae*_*sto 80 javascript json extjs
我正在使用Sencha Touch(ExtJS)从服务器获取JSON消息.我收到的消息是这样的:
{
"success": true,
"counters": [
{
"counter_name": "dsd",
"counter_type": "sds",
"counter_unit": "sds"
},
{
"counter_name": "gdg",
"counter_type": "dfd",
"counter_unit": "ds"
},
{
"counter_name": "sdsData",
"counter_type": "sds",
"counter_unit": " dd "
},
{
"counter_name": "Stoc final",
"counter_type": "number ",
"counter_unit": "litri "
},
{
"counter_name": "Consum GPL",
"counter_type": "number ",
"counter_unit": "litri "
},
{
"counter_name": "sdg",
"counter_type": "dfg",
"counter_unit": "gfgd"
},
{
"counter_name": "dfgd",
"counter_type": "fgf",
"counter_unit": "liggtggggri "
},
{
"counter_name": "fgd",
"counter_type": "dfg",
"counter_unit": "kwfgf "
},
{
"counter_name": "dfg",
"counter_type": "dfg",
"counter_unit": "dg"
},
{
"counter_name": "gd",
"counter_type": "dfg",
"counter_unit": "dfg"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法解析这个JSON对象,以便我可以使用每个计数器对象.
我试图这样做:
var jsonData = Ext.util.JSON.decode(myMessage);
for (var counter in jsonData.counters) {
console.log(counter.counter_name);
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么 ?谢谢!
mus*_*fan 129
Javascript有一个内置的字符串JSON解析,我认为你有:
var myObject = JSON.parse("my json string");
Run Code Online (Sandbox Code Playgroud)
在你的例子中使用它将是:
var jsonData = JSON.parse(myMessage);
for (var i = 0; i < jsonData.counters.length; i++) {
var counter = jsonData.counters[i];
console.log(counter.counter_name);
}
Run Code Online (Sandbox Code Playgroud)
编辑:你使用for循环有一个错误(我在第一次阅读时错过了这个,因为当场的@Evert归功于此).使用for-in循环将var设置为当前循环的属性名称,而不是实际数据.有关正确用法,请参阅上面的更新循环
重要提示:该JSON.parse方法不适用于旧的旧浏览器 - 因此,如果您计划通过某种时间弯曲互联网连接使您的网站可用,这可能是一个问题!如果你真的感兴趣,这里是一个支持图表(勾选我的所有方框).
在for-in-循环中,运行变量包含属性名称,而不是属性值.
for (var counter in jsonData.counters) {
console.log(jsonData.counters[counter].counter_name);
}
Run Code Online (Sandbox Code Playgroud)
但由于计数器是一个数组,你必须使用正常的for循环:
for (var i=0; i<jsonData.counters.length; i++) {
var counter = jsonData.counters[i];
console.log(counter.counter_name);
}
Run Code Online (Sandbox Code Playgroud)
这是我的答案
<!DOCTYPE html>
<html>
<body>
<h2>Create Object from JSON String</h2>
<p>
First Name: <span id="fname"></span><br>
Last Name: <span id="lname"></span><br>
</p>
<script>
var txt = '{"employees":[' +
'{"firstName":"John","lastName":"Doe" },' +
'{"firstName":"Anna","lastName":"Smith" },' +
'{"firstName":"Peter","lastName":"Jones" }]}';
//var jsonData = eval ("(" + txt + ")");
var jsonData = JSON.parse(txt);
for (var i = 0; i < jsonData.employees.length; i++) {
var counter = jsonData.employees[i];
//console.log(counter.counter_name);
alert(counter.firstName);
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)