Javascript 将Json转换为Csv问题

Javascript 将Json转换为Csv问题,javascript,json,csv,Javascript,Json,Csv,我正在尝试用JavaScript将JSON转换为CSV。问题是我一直遇到错误:无法将未定义或null转换为object 按功能键 我只需要数据中的“features.attributes”键和值。我没有问题得到关键,但价值观似乎是一个问题。任何帮助都将不胜感激 json { “displayFieldName”:“标签”, “字段别名”:{ “OBJECTID”:“OBJECTID”, “标签”:“标签”, “西部”:“西部”, “东”:“东”, “北”:“北”, “南”:“南”, “比例”:“

我正在尝试用JavaScript将JSON转换为CSV。问题是我一直遇到错误:无法将未定义或null转换为object 按功能键

我只需要数据中的“features.attributes”键和值。我没有问题得到关键,但价值观似乎是一个问题。任何帮助都将不胜感激

json

{
“displayFieldName”:“标签”,
“字段别名”:{
“OBJECTID”:“OBJECTID”,
“标签”:“标签”,
“西部”:“西部”,
“东”:“东”,
“北”:“北”,
“南”:“南”,
“比例”:“比例”,
“头衔”:“头衔”,
“版本”:“版本”,
“可用”:“可用”,
“physHold”:“physHold”,
“primeMer”:“primeMer”,
“投影”:“投影”,
“发布者”:“发布者”,
“datePub”:“datePub”,
“颜色”:“颜色”,
“recId”:“recId”,
“注”:“注”,
“位置”:“位置”,
“浴线”:“浴线”,
“bathInterv”:“bathInterv”,
“instCallNo”:“instCallNo”,
“setTitle”:“setTitle”,
“sheetId”:“sheetId”,
“digita”:“digita”,
“titleAlt”:“titleAlt”,
“digHold”:“digHold”,
“miradorURL”:“miradorURL”,
“iiifURL”:“iiifURL”,
“形状长度”:“形状长度”,
“形状区域”:“形状区域”
},
“几何类型”:“ESRIGEMETRYPOLYGON”,
“空间参考”:{
“wkid”:102100,
“最新工作ID”:3857
},
“字段”:[
{
“名称”:“OBJECTID”,
“类型”:“ESRIFELDTYPEOID”,
“别名”:“OBJECTID”
},
{
“名称”:“标签”,
“类型”:“ESRIFELDTypeString”,
“别名”:“标签”,
“长度”:50
},
{
“名称”:“西部”,
“类型”:“EsriFeldTypeDouble”,
“别名”:“西部”
},
{
“名称”:“东方”,
“类型”:“EsriFeldTypeDouble”,
“别名”:“东”
},
{
“名称”:“北方”,
“类型”:“EsriFeldTypeDouble”,
“别名”:“北”
},
{
“名称”:“南方”,
“类型”:“EsriFeldTypeDouble”,
“别名”:“南”
},
{
“名称”:“比例”,
“类型”:“ESRIFELDTYPEINTEGER”,
“别名”:“比例”
},
{
“姓名”:“职务”,
“类型”:“ESRIFELDTypeString”,
“别名”:“标题”,
“长度”:55
},
{
“名称”:“版本”,
“类型”:“ESRIFELDTypeString”,
“别名”:“版本”,
“长度”:85
},
{
“名称”:“可用”,
“类型”:“EsriFeldTypeSmallInteger”,
“别名”:“可用”
},
{
“名称”:“physHold”,
“类型”:“ESRIFELDTypeString”,
“别名”:“physHold”,
“长度”:3
},
{
“名称”:“Primmer”,
“类型”:“EsriFeldTypeSmallInteger”,
“别名”:“primeMer”
},
{
“名称”:“投影”,
“类型”:“ESRIFELDTypeString”,
“别名”:“投影”,
“长度”:19
},
{
“名称”:“出版商”,
“类型”:“ESRIFELDTypeString”,
“别名”:“发布者”,
“长度”:33
},
{
“名称”:“datePub”,
“类型”:“EsriFeldTypeSmallInteger”,
“别名”:“datePub”
},
{
“名称”:“颜色”,
“类型”:“EsriFeldTypeSmallInteger”,
“别名”:“颜色”
},
{
“名称”:“recId”,
“类型”:“ESRIFELDTypeString”,
“别名”:“recId”,
“长度”:30
},
{
“名称”:“备注”,
“类型”:“ESRIFELDTypeString”,
“别名”:“注意”,
“长度”:254
},
{
“名称”:“位置”,
“类型”:“ESRIFELDTypeString”,
“别名”:“位置”,
“长度”:254
},
{
“名称”:“浴线”,
“类型”:“ESRIFELDTypeString”,
“别名”:“浴线”,
“长度”:5
},
{
“名称”:“bathInterv”,
“类型”:“ESRIFELDTypeString”,
“别名”:“bathInterv”,
“长度”:50
},
{
“名称”:“instCallNo”,
“类型”:“ESRIFELDTypeString”,
“别名”:“instCallNo”,
“长度”:50
},
{
“名称”:“设置标题”,
“类型”:“ESRIFELDTypeString”,
“别名”:“设置标题”,
“长度”:50
},
{
“名称”:“sheetId”,
“类型”:“ESRIFELDTYPEINTEGER”,
“别名”:“sheetId”
},
{
“名称”:“digita”,
“类型”:“ESRIFELDTypeString”,
“别名”:“digita”,
“长度”:8000
},
{
“名称”:“titleAlt”,
“类型”:“ESRIFELDTypeString”,
“别名”:“titleAlt”,
“长度”:8000
},
{
“名称”:“digHold”,
“类型”:“ESRIFELDTypeString”,
“别名”:“digHold”,
“长度”:8000
},
{
“名称”:“miradorURL”,
“类型”:“ESRIFELDTypeString”,
“别名”:“miradorURL”,
“长度”:8000
},
{
“名称”:“iiifURL”,
“类型”:“ESRIFELDTypeString”,
“别名”:“iiifURL”,
“长度”:8000
},
{
“名称”:“形状长度”,
“类型”:“EsriFeldTypeDouble”,
“别名”:“形状长度”
},
{
“名称”:“形状区域”,
“类型”:“EsriFeldTypeDouble”,
“别名”:“形状区域”
}
],
“特点”:[
{
“属性”:{
“目标”:1,
“标签”:“,
“西部”:-5.82638888999996,
“东”:-5.7838888900000001,
“北”:3577000000000003,
“南”:35.8141666699999,
“规模”:5000,
“标题”:“坦格尔港”,
“版本”:“,
“可用”:1,
“physHold”:“是的”,
“引物”:131,
“投影”:“投影”,
“出版者”:“,
“datePub”:1908年,
“颜色”:31,
“recId”:“agsmap026454”,
“注:“\\\\$a地形图,由模板线和hachures显示。深度图,由等深线和测深显示。\\\$a\\\$a\”Nota,le de\u0301 Tail de la ville,emprunte\u0301 au plan local espangnol,a e\u0301te\u0301整流器
function exportJSONToCSV(objArray) {
    var arr = typeof objArray !== 'object' ? JSON.parse(objArray) : objArray;
    
    var str =
      `${Object.keys(arr[0])
        .map((value) => `"${value}"`)
        .join(',')}` + '\r\n';
    var csvContent = arr.reduce((st, next) => {
      console.log(next);
      st +=
        `${Object.values(next)
          .map((value) => `"${value}"`)
          .join(',')}` + '\r\n';
      return st;
    }, str);
    var element = document.createElement('a');
    element.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvContent);
    element.target = '_blank';
    element.download = 'export.csv';
    element.click();
  }
var json = ... // YOUR JSON
var features = json.features;
var isFirstIterationCompleted = false;
var csv = '';
features.forEach(e => {
    var attributesKeys = Object.keys(e.attributes);
    if (!isFirstIterationCompleted) {
        csv += attributesKeys.join(';') + '\n'; // separated by semicolon
        isFirstIterationCompleted = true;
    }

    attributesKeys.forEach(a => {
        csv += e.attributes[a] + ';';
    });

    csv += '\n';
})

console.log(csv);