2015-10-20 84 views
0

嗨我想从嵌套的json数组获取csv文件我也获取csv,但问题是seller_name和drop_seller名称显示为[object,object]因为嵌套的json数据附加图像我的CSV文件的文件enter image description here 这里是我的阵列如何从嵌套json数据获取csv

{ 
"id":"1925", 
"booking_id":"1442931120", 
"appointment_time":"2015-09-29 16:00:00", 
"booking_address":"Sector 15 gurgaon", 
"booking_type":"later", 
"category_id":"9", 
"category_name":"Wash & Iron", 
"stage":"accepted", 
"lat":"74.83908", 
"invoice_price":null, 
"lon":"87.7333", 
"user_name":" ", 
"user_mobile_number":"8800292916", 
"user_id":"1782", 
"booking_time":"2015-09-22 19:09:55", 
"price":null, 
"seller_id":"52", 
"payment_stage":"individual", 
"discount":null, 
"visting_charge":"0", 
"rating":null, 
"promo_code":"", 
"drop_address":"", 
"drop_time":"2015-10-01 20:18:28", 
"comments":"", 
"platform":"Web", 
"order_return":"0", 
"cloths_count":null, 
"dc_cloths_count":null, 
"cloths_weight":null, 
"categories":null, 
"service_type":"regular", 
"category_type":"0", 
"seller":{ 
"name":"Dinesh", 
"mobile_number":"9818782536", 
"distance":"10", 
"lat":"28.4356578", 
"lon":"77.1110703", 
"id":"52", 
"picture":"resources\/seller\/images\/20150709004010_559e2c4248c73.jpg", 
"provider_picture":"resources\/seller\/provider-pictures\/logo_559e2c4248d4a.png" 
}, 
"dropSeller":{ 
"name":"Dinesh", 
"mobile_number":"9818782536", 
"distance":"10", 
"lat":"28.4356578", 
"lon":"77.1110703", 
"id":"52", 
"picture":"resources\/seller\/images\/20150709004010_559e2c4248c73.jpg", 
"provider_picture":"resources\/seller\/provider-pictures\/logo_559e2c4248d4a.png" 
} 
} 

,这里是我的JavaScript文件

function JSONToCSVConvertor(JSONData, ReportTitle, ShowLabel) { 
    //If JSONData is not an object then JSON.parse will parse the JSON string in an Object 
    var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData; 

    var CSV = '';  
    //Set Report title in first row or line 

    CSV += ReportTitle + '\r\n\n'; 

    //This condition will generate the Label/Header 
    if (ShowLabel) { 
     var row = ""; 

     //This loop will extract the label from 1st index of on array 
     for (var index in arrData[0]) { 

      //Now convert each value to string and comma-seprated 
      row += index + ','; 
     } 

     row = row.slice(0, -1); 

     //append Label row with line break 
     CSV += row + '\r\n'; 
    } 

    //1st loop is to extract each row 
    for (var i = 0; i < arrData.length; i++) { 
     var row = ""; 

     //2nd loop will extract each column and convert it in string comma-seprated 
     for (var index in arrData[i]) { 
      row += '"' + arrData[i][index] + '",'; 
     } 

     row.slice(0, row.length - 1); 

     //add a line break after each row 
     CSV += row + '\r\n'; 
    } 

    if (CSV == '') {   
     alert("Invalid data"); 
     return; 
    } 

    //Generate a file name 
    var fileName = "MyReport_"; 
    //this will remove the blank-spaces from the title and replace it with an underscore 
    fileName += ReportTitle.replace(/ /g,"_"); 

    //Initialize file format you want csv or xls 
    var uri = 'data:text/csv;charset=utf-8,' + escape(CSV); 

    // Now the little tricky part. 
    // you can use either>> window.open(uri); 
    // but this will not work in some browsers 
    // or you will not get the correct file extension  

    //this trick will generate a temp <a /> tag 
    var link = document.createElement("a");  
    link.href = uri; 

    //set the visibility hidden so it will not effect on your web-layout 
    link.style = "visibility:hidden"; 
    link.download = fileName + ".csv"; 

    //this part will append the anchor tag and remove it after automatic click 
    document.body.appendChild(link); 
    link.click(); 
    document.body.removeChild(link); 
} 

,我传递一个JSON对象如前面我出,我得到的CSV文件还,但问题出现在seller_name和drop_seller中名称显示为[对象,对象]其余数据来对我认为这是因为这些值是在嵌套的JSON如何得到这些名称任何帮助请

+0

其实我不太了解你的代码。你是否将该对象当作数组处理?期望的输出应该如何?我的猜测是,你只解析父对象的属性和它们的值,因此,有两个对象作为值,而字符串显示为[对象对象]。如果一个属性本身就是一个对象,那么你需要建立一个检查关系,然后深入阅读这些值。 – Danmoreng

回答

1

如果我正确地理解你,你想只显示卖家名称,而不是它的每一个属性?

如果是这种情况,只需添加一个对象的检查,然后显示其名称。

for (var index in arrData[i]) { 
    var data = arrData[i][index]; 
    if(typeof data === 'object'){ 
     data = data.name; 
    } 
    row += '"' + data + '",'; 
}