JSON Strigify仅返回父级

时间:2019-10-15 01:58:51

标签: jquery json object

我尝试使用JSON strigify,但它仅返回我:

{"name":"nipahVirus","children":{}}

是因为我的格式数据类型转换错误?或我做过的任何地方。如果有人可以帮助我,将不胜感激。 我正在将csv转换为JSON。

这是我的代码。

    function findSpecies(name){
    var objspecies = {};
    Papa.parse("nipahdata.csv", {
        download: true,
        complete: function(results) {

            for(i = 0;i < results.data.length; i ++){
                var species = {};    
                if(name == results.data[i][0]){
                species["name"] = results.data[i][1];
                species["niv_status"] = results.data[i][2];
                objspecies[results.data[i][0]] = species; 
                }
            }

        }
    });    
    return objspecies;
}        

var nipahVirus_obj = {};
var genus = {};
Papa.parse("nipahdata.csv", {
    download: true,
    complete: function(results) {
        var currgenus = "";        
        for(i = 0;i < results.data.length; i ++){


            if(results.data[i][0] == "")
            continue; 

            if(currgenus != results.data[i][0]){
                var objgenus = {};
                currgenus = results.data[i][0];
                objgenus["name"] = results.data[i][0];
                objgenus["children"]=findSpecies(results.data[i][0]);
                genus[results.data[i][0]] = objgenus;
            }

        }

    }
});
        nipahVirus_obj["name"] = "nipahVirus";
        nipahVirus_obj["children"] = genus;    
        var nipahVirus_JSON = JSON.stringify(nipahVirus_obj);
        console.log(nipahVirus_JSON);

csv就是这样,其中包含三列:

Genus,Species Name,NiV status
Craseonycteris,Craseonycteris_thonglongyai,0
Emballonura,Emballonura_alecto,0
Emballonura,Emballonura_dianae,0
Emballonura,Emballonura_furax,0
Emballonura,Emballonura_raffrayana,0
Emballonura,Emballonura_serii,0
Emballonura,Emballonura_monticola,0
Emballonura,Emballonura_beccarii,0
Emballonura,Emballonura_semicaudata,0
Mosia,Mosia_nigrescens,0
Saccolaimus,Saccolaimus_flaviventris,0
Saccolaimus,Saccolaimus_saccolaimus,0

1 个答案:

答案 0 :(得分:0)

函数findSpecies中有一个异步进度,您实际返回的objspecs是您定义的{},而不是完整返回的数据。您可以定义一个回调函数,并完整地调用它。代码可能像这样,因为有两个帖子,我无法调试它,所以您应该自己在环境中运行它并进行检查。

function findSpecies(name){
    var objspecies = {};
    Papa.parse("nipahdata.csv", {
        download: true,
        complete: function(results) {

            for(i = 0;i < results.data.length; i ++){
                var species = {};    
                if(name == results.data[i][0]){
                species["name"] = results.data[i][1];
                species["niv_status"] = results.data[i][2];
                objspecies[results.data[i][0]] = species; 
                }
            }
            callback(objspecies)
        }
    });    
}        
var objgenus = {};
var nipahVirus_obj = {};
var genus = {};
Papa.parse("nipahdata.csv", {
    download: true,
    complete: function(results) {
        var currgenus = "";        
        for(i = 0;i < results.data.length; i ++){


            if(results.data[i][0] == "")
            continue; 

            if(currgenus != results.data[i][0]){
                
                currgenus = results.data[i][0];
                objgenus["name"] = results.data[i][0];
                findSpecies(results.data[i][0]);
            }

        }

    }
});

      function callback(data){
        objgenus["children"]=data
        genus[results.data[i][0]] = objgenus;
        nipahVirus_obj["name"] = "nipahVirus";
        nipahVirus_obj["children"] = genus;    
        var nipahVirus_JSON = JSON.stringify(nipahVirus_obj);
        console.log(nipahVirus_JSON);
       }