Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用列表和视图在Cloudant中将JSON数据转换为CSV_Json_Csv_Ibm Cloud_Cloudant - Fatal编程技术网

使用列表和视图在Cloudant中将JSON数据转换为CSV

使用列表和视图在Cloudant中将JSON数据转换为CSV,json,csv,ibm-cloud,cloudant,Json,Csv,Ibm Cloud,Cloudant,我尝试使用List函数将Cloudant db中的JSON数据转换为csv格式。它适用于除JSON数组值(即嵌套值)之外的所有值。对于这些,我在csv文档中将[object]作为输出 请在下面找到我正在使用的示例JSON文档: { "NAME": "Aparna", "EMAIL": "something@domain.com", "PUBLIC_OFFICIALS_CONTACTED": [ { "NAME_PUBLIC_OFFICIAL": [ "ab"

我尝试使用List函数将Cloudant db中的JSON数据转换为csv格式。它适用于除JSON数组值(即嵌套值)之外的所有值。对于这些,我在csv文档中将[object]作为输出

请在下面找到我正在使用的示例JSON文档:

  {
    "NAME": "Aparna",
    "EMAIL": "something@domain.com",

    "PUBLIC_OFFICIALS_CONTACTED": [
    { "NAME_PUBLIC_OFFICIAL": [ "ab"],
    "TITLE_PUBLIC_OFFICIAL": ["cd"]}
    ],
    "COMMUNICATION_TYPE": [
    "Meeting",
    "Phone",
    "Handout",
    "Conference"
    ],
    "NAMES_OF_OTHERS_FROM_IBM": [
    { "NAME_OF_OTHERS": ["ef"],
    "TITLE_OF_OTHERS": [ "gh"]}
    ],
    "COMMUNICATION_BENEFIT": "Yes",
    "LAST_UPDATE_BY" : "ap"
    }

Please find the map and list functions used below :


     "map" : "function(doc){
                                 if((\"SAVE_TYPE_SUBMIT\" in doc) && (doc.SAVE_TYPE_SUBMIT== \"Submit\")) {
                                    emit (doc. LAST_UPDATE_BY,[doc.NAME,doc.EMAIL,doc.PUBLIC_OFFICIALS_CONTACTED[0].NAME_PUBLIC_OFFICIAL,\n   doc.PUBLIC_OFFICIALS_CONTACTED[0].TITLE_PUBLIC_OFFICIAL,doc.COMMUNICATION_TYPE,doc.NAMES_OF_OTHERS_FROM_IBM[0].NAME_OF_OTHERS,  doc.NAMES_OF_OTHERS_FROM_IBM[0].TITLE_OF_OTHERS, doc.COMMUNICATION_BENEFIT,doc. LAST_UPDATE_BY,doc.LAST_UPDATE_DATE]) ;
                                  }
                              }



"list" : "function (head, req) {
                     var row;
                     start({\n headers: {'Content-Type': 'text/csv' }, 
                        });
                     var first = true;
                     while(row = getRow()) {
                         var doc = row.doc;
                         if (first) {
                            send(Object.keys(doc).join(',') + '\\n');
                            first = false;\n }
                            var line = '';
                            for(var i in doc) {
                           // comma separator
                               if (line.length > 0) {
                                  line += ',';\n }
                                  // output the value, ensuring values that themselves
                                 // contain commas are enclosed in double quotes
                                    var val = doc[i];
                                    if (typeof val == 'string' && val.indexOf(',') > -1)                            {
                                         line += '\"' + val.replace(/\"/g,'\"\"') + '\"';
                                     } 
                                   else {
                                       line += val;
                                        }
                                 }
                                 line += '\\n';
                                 send(line);
                             }}"
注意:在映射中,为了简化函数,现在只从JSON数组中提取了第一个值


请帮助理解如何获取嵌套的JSON值或数组,并以csv格式下载它们。任何指导都将不胜感激

您可以尝试将要导出的对象字符串化,这样您会得到一些线索

if (typeof val == 'string' && val.indexOf(',') > -1)                            {
    line += '\"' + val.replace(/\"/g,'\"\"') + '\"';
} 
else {
    line += JSON.stringify(val);
}
甚至更好

if (typeof val == 'string' && val.indexOf(',') > -1)                            {
    line += '\"' + val.replace(/\"/g,'\"\"') + '\"';
} 
else if(val instanceof Array){
    line += val.join(',');
}
else {
    line += JSON.stringify(val);
}

这里有一些事情需要改变,这可能会有所帮助。首先,您不需要发出所有要使用的值,因为在处理视图时,您可以从列表中访问文档本身

考虑到这一点,地图可以有一个类似于

emit(doc.LAST\u UPDATE\u BY,null)

有了这个选项,如果您使用
include\u docs=true
请求列表/视图,那么您可以在
while(row=getRow())
部分中引用文档中的字段,如下所示:

send(row.doc.NAME+,“+row.doc.EMAIL+”\\n')

对于嵌套文档,请尝试以下操作:

row.doc.PUBLIC\u officer\u contact.0.NAME\u PUBLIC\u officer


您已经在另一个问题中提到了我推荐的文章,作为一个完整的工作示例-希望这个解释也有帮助。

您的解决方案确实帮助我获得文档中的JSON数组值,因为这是我的问题,所以我选择这个。问题在于,在csv中格式化此值并不容易,因为每个字段都被视为字符串的一部分。不过,谢谢你的回答!这确实有帮助。