Javascript 如何解析 JSON 数组

2022-08-30 05:34:14

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

我做错了什么?谢谢!


答案 1

Javascript有一个内置的JSON字符串解析,我认为这就是你所拥有的:

var myObject = JSON.parse("my json string");

要将其与您的示例一起使用,将是:

var jsonData = JSON.parse(myMessage);
for (var i = 0; i < jsonData.counters.length; i++) {
    var counter = jsonData.counters[i];
    console.log(counter.counter_name);
}

这是一个工作示例

编辑:您在使用for循环时有一个错误(我在第一次阅读时错过了这一点,归功于@Evert)。使用 for-in 循环会将 var 设置为当前循环的属性名称,而不是实际数据。请参阅上面我更新的循环,了解正确的用法

重要提示:该方法不适用于旧的旧浏览器 - 因此,如果您计划通过某种时间弯曲互联网连接来提供您的网站,这可能是一个问题!如果你真的感兴趣,这里有一个支持图表(勾选了我所有的方框)。JSON.parse


答案 2

在 for-in-loop 中,正在运行的变量保存属性名称,而不是属性值。

for (var counter in jsonData.counters) {
    console.log(jsonData.counters[counter].counter_name);
}

但是由于计数器是一个数组,因此必须使用正常的 for 循环:

for (var i=0; i<jsonData.counters.length; i++) {
    var counter = jsonData.counters[i];
    console.log(counter.counter_name);
}