我使用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"
}
]
}
我的问题是我不能解析这个JSON对象,这样我就可以使用每一个计数器对象。
我试着这样做:
var jsonData = Ext.util.JSON.decode(myMessage);
for (var counter in jsonData.counters) {
console.log(counter.counter_name);
}
我做错了什么?谢谢!
发布于 2013-03-19 21:01:28
这是我的回答:
<!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>
发布于 2012-04-03 19:00:26
在for- In -loop中,运行变量保存属性名,而不是属性值。
for (var counter in jsonData.counters) {
console.log(jsonData.counters[counter].counter_name);
}
但是因为counters是一个数组,所以你必须使用一个普通的for循环:
for (var i=0; i<jsonData.counters.length; i++) {
var counter = jsonData.counters[i];
console.log(counter.counter_name);
}
发布于 2017-05-30 06:47:44
与服务器数据交互的"Sencha方式“是设置一个由Ext.data.proxy.Proxy
(在本例中为Ext.data.proxy.Ajax
)代理的Ext.data.Store
,其中提供了一个Ext.data.reader.Json
(对于JSON编码的数据,也有其他可用的阅读器)。为了将数据写回服务器,有几种类型的Ext.data.writer.Writer
。
下面是一个这样的设置示例:
var store = Ext.create('Ext.data.Store', {
fields: [
'counter_name',
'counter_type',
'counter_unit'
],
proxy: {
type: 'ajax',
url: 'data1.json',
reader: {
type: 'json',
idProperty: 'counter_name',
rootProperty: 'counters'
}
}
});
本例中的data1.json
(在this fiddle中也可用)逐字包含您的数据。在这种情况下,idProperty: 'counter_name'
可能是可选的,但通常指向主键属性。rootProperty: 'counters'
指定哪个属性包含数据项的数组。
使用这种存储设置,您可以通过调用store.load()
从服务器重新读取数据。您还可以将商店连接到任何Sencha Touch适当的UI组件,如网格、列表或表单。
https://stackoverflow.com/questions/9991805
复制相似问题