首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript如何解析JSON数组

Javascript如何解析JSON数组
EN

Stack Overflow用户
提问于 2012-04-03 18:54:18
回答 8查看 552K关注 0票数 112

我使用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);
 }

我做错了什么?谢谢!

EN

回答 8

Stack Overflow用户

发布于 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>
票数 7
EN

Stack Overflow用户

发布于 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);
}
票数 6
EN

Stack Overflow用户

发布于 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组件,如网格、列表或表单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9991805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档