如何在javascript中迭代json数组

 干豆豆腐 发布于 2023-02-08 11:03

是的,有很多关于此的帖子.但我的疑问有点不同.我有以下数组例如

var dictionary = {
    "12Jan2013": [{
        "id": "0",
        "name": "ABC"
    }, {
        "id": "1",
        "name": "DEF"
    }],
    "13Jan2013": [{
        "id": "0",
        "name": "PQR"
    }, {
        "id": "1",
        "name": "xyz"
    }]
};

相同的帖子在同一个网站上但是在这里字典json数组键是动态的.这是日期,即12Jan2013.它可以是任何日期.它不是静态的.我已经搜索过但没有得到解决方案.

如何迭代这样的json数组?

和如何在上面显示的同一格式中打印json数组?

编辑

这是我的真实代码.我在下面的代码显示了一个注释,我想要iterate数据,即回调中的jsonDatavargetWeatherDataForCities

var arrAllrecords = [];
var arrCityrecordForADay = [];
function getWeatherDataForCities(cityArray, callback){

var toDaysTimestamp = Math.round((new Date()).getTime() / 1000) - (24*60*60);
for(var i in cityArray){

    for(var j=1; j<=1; j++){
        var jsonurl = "http://api.openweathermap.org/data/2.5/history/city?q="+cityArray[i]+"&dt="+toDaysTimestamp;

        $.ajax({
            url: jsonurl,
            dataType: "jsonp",
            mimeType: "textPlain",
            crossDomain: true,
            contentType: "application/json; charset=utf-8",
            success: function(data){                    
                var arrCityRecordForDay = [];
                /*arrCityrecordForADay.push(data.list[0].city.name);
                arrCityrecordForADay.push(data.list[0].weather[0].description);
                arrCityrecordForADay.push(timeConverter(data.list[0].dt));
                arrCityrecordForADay.push(data.list[0].main.temp);
                arrCityrecordForADay.push(data.list[0].main.humidity);
                arrCityrecordForADay.push(data.list[0].main.pressure)
                arrCityrecordForADay.push(data.list[0].wind.speed);*/
                //'{"pets":[{"name":"jack"},{"name":"john"},{"name":"joe"}]}';

                arrCityRecordForDay.push(
                    {"cityName" : data.list[0].city.name},
                    {"weather" : data.list[0].weather[0].description}
                );

                var tempId = data.list[0].city.name+"-"+timeConverter(data.list[0].dt);

                arrCityrecordForADay.push(
                    {tempId : arrCityRecordForDay}
                );

                if(((arrCityrecordForADay.length)) === cityArray.length) {
                    callback(arrCityrecordForADay);
                }

        } });
        toDaysTimestamp = toDaysTimestamp - (24*60*60);
    }   
}       
}

$(document ).ready(function() {

 var cityArray = new Array();
  cityArray[0] = "pune";

  getWeatherDataForCities(cityArray, function(jsonData) {
        // Here I want to iterate jsonData
  });


});

tewathia.. 10

使用for-in ...类似于:

for (var i in dictionary) {
    dictionary[i].forEach(function(elem, index) {
        console.log(elem, index);
    });
}

其中,i将通过你的迭代dictionary对象,然后你可以使用forEach字典中的每一个JSON数组(使用dictionary[i])

使用此代码,您将获得

Object {id: "0", name: "ABC"} 0 
Object {id: "1", name: "DEF"} 1 
Object {id: "0", name: "PQR"} 0 
Object {id: "1", name: "xyz"} 1 

您可以定制forEach函数定义(替换console.log位)以随意执行任何操作.

DEMO

编辑:使用相同的东西 Object.keys

Object.keys(dictionary).forEach(function(key) {
    dictionary[key].forEach(function(elem, index) {
        console.log(elem, index);
    });
});

Edit2:鉴于jsonData对象的结构有点复杂,您可以尝试使用一种(一种)通用函数,它将分别作用于每种类型的组件.我可能错过了一些案例,但可能是这样的:

function strung(arg) {
    var ret = '';
    if (arg instanceof Array) {
        arg.forEach(function(elem, index) {
            ret += strung(elem) + ',';
        });
    } else if (arg instanceof Object) {
        Object.keys(arg).forEach(function(key) {
            ret += key + ': /' + strung(arg[key]) + '/';
        });
    } else if (typeof arg === "string" || typeof arg === "number") {
        ret = arg;
    }
    return ret;
}

document.body.innerHTML = strung(jsonData);

DEMO

1 个回答
  • 使用for-in ...类似于:

    for (var i in dictionary) {
        dictionary[i].forEach(function(elem, index) {
            console.log(elem, index);
        });
    }
    

    其中,i将通过你的迭代dictionary对象,然后你可以使用forEach字典中的每一个JSON数组(使用dictionary[i])

    使用此代码,您将获得

    Object {id: "0", name: "ABC"} 0 
    Object {id: "1", name: "DEF"} 1 
    Object {id: "0", name: "PQR"} 0 
    Object {id: "1", name: "xyz"} 1 
    

    您可以定制forEach函数定义(替换console.log位)以随意执行任何操作.

    DEMO

    编辑:使用相同的东西 Object.keys

    Object.keys(dictionary).forEach(function(key) {
        dictionary[key].forEach(function(elem, index) {
            console.log(elem, index);
        });
    });
    

    Edit2:鉴于jsonData对象的结构有点复杂,您可以尝试使用一种(一种)通用函数,它将分别作用于每种类型的组件.我可能错过了一些案例,但可能是这样的:

    function strung(arg) {
        var ret = '';
        if (arg instanceof Array) {
            arg.forEach(function(elem, index) {
                ret += strung(elem) + ',';
            });
        } else if (arg instanceof Object) {
            Object.keys(arg).forEach(function(key) {
                ret += key + ': /' + strung(arg[key]) + '/';
            });
        } else if (typeof arg === "string" || typeof arg === "number") {
            ret = arg;
        }
        return ret;
    }
    
    document.body.innerHTML = strung(jsonData);
    

    DEMO

    2023-02-08 11:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有