将CSV文件转换为嵌套的JSON obj

伊安·迪米(Ioan Dimi)

我正在尝试将CS​​V文件转换为JSON嵌套对象。我已经实现了任务,但是我已经对字段进行了硬编码,如果CSV字段发生了变化,我也必须修改代码。因此,我正在寻找一种动态的方法。

假设我已经从CSV文件中读取了行,并创建了以下数组:

    var csv = ["ChapterIndex;ArticleIndex;URL;language/chapter/en;language/title/en;language/bodyText/en;language/keywords/en;language/languageCode/en;language/chapter/es;language/title/es;language/bodyText/es;language/keywords/es;language/languageCode/es",
    "1;1;www.hotmail.com;Overview-en;Article1-en;BodyText1-en;key1,key2;en;Overview-es;Article1-es;BodyText1-es;key1,key2;es",
    "1;1;www.google.com;Overview-en;Article2-en;BodyText2-en;key1,key2;en;Overview-es;Article2-es;BodyText2-ens;key1,key2;es"]

我想将以下格式提供给JSON

var obj ={
     chaterIndex:1,
     articleIndex:1,
     url:"www.test.com"
     language:[
     {  chapter:"Overvie-en",
        title:"Article1-en",
        bodyText:"bodyText-en",
        keywords:"key1,key2",
        languageCode:"en"
      },
      { chapter:"Overvie-es",
        title:"Article1-es",
        bodyText:"bodyText-es",
        keywords:"key1,key2",
        languageCode:"es"
      }]
      }

到目前为止,我已经完成了一半任务,但是我的逻辑没有进一步发展,我想请您提供帮助。

var csv = ["ChapterIndex;ArticleIndex;URL;language/chapter/en;language/title/en;language/bodyText/en;language/keywords/en;language/languageCode/en;language/chapter/es;language/title/es;language/bodyText/es;language/keywords/es;language/languageCode/es",
"1;1;www.hotmail.com;Overview-en;Article1-en;BodyText1-en;key1,key2;en;Overview-es;Article1-es;BodyText1-es;key1,key2;es",
"1;1;www.google.com;Overview-en;Article2-en;BodyText2-en;key1,key2;en;Overview-es;Article2-es;BodyText2-ens;key1,key2;es"]

var attrs = csv.splice(0,1);
var articles = csv
var result = csv.map(function(row) {
  var obj = {};
  var rowData = row.split(';');
  attrs[0].split(';').forEach(function(val, idx) {
      obj = constructObj(val, obj, rowData[idx]);
 });
 return obj;
})


function constructObj(str, parentObj, data) {
  if(str.split('/').length === 1) {
    parentObj[str] = data;
    return  parentObj;
  }
  var languages = [];
  var curKey = str.split('/')[0];
  if(!parentObj[curKey])
    parentObj[curKey] = {};
  parentObj[curKey] = constructObj(str.split('/').slice(1).join('/'), parentObj[curKey], data);
  return parentObj;
}

console.log(result);

suiwenfeng

var csv = ["ChapterIndex;ArticleIndex;URL;language/chapter/en;language/title/en;language/bodyText/en;language/keywords/en;language/languageCode/en;language/chapter/es;language/title/es;language/bodyText/es;language/keywords/es;language/languageCode/es",
"1;1;www.hotmail.com;Overview-en;Article1-en;BodyText1-en;key1,key2;en;Overview-es;Article1-es;BodyText1-es;key1,key2;es",
"1;1;www.google.com;Overview-en;Article2-en;BodyText2-en;key1,key2;en;Overview-es;Article2-es;BodyText2-ens;key1,key2;es"]

function camelCase(str) { 
    return str 
        .replace(/\s(.)/g, function(a) { 
            return a.toUpperCase(); 
        }) 
        .replace(/\s/g, '') 
        .replace(/^.{0,3}/, function(b) { 
            return b.toLowerCase(); 
        }); 
} 

var attrs = csv.splice(0,1);
var articles = csv
var result = csv.map(function(row) {
  var obj = {};
  var rowData = row.split(';');
  attrs[0].split(';').forEach(function(val, idx) {
      obj = constructObj(val, obj, rowData[idx]);
 });
 return obj;
})


function constructObj(str, parentObj, data) {
  if(str.split('/').length === 1) {
    parentObj[camelCase(str)] = data;
    return  parentObj;
  }
  // language
  var curKey = str.split('/')[0]; 
  if(!parentObj[curKey]) {
    parentObj[curKey] = [];
    newLang = {} 
    newLang[str.split('/')[1]] = data;
    parentObj[curKey].push(newLang); 
  } else {
    var found = false;
    for (var i = 0; i < parentObj[curKey].length; i++) {
      if(Object.values(parentObj[curKey][i])[0] !== undefined && Object.values(parentObj[curKey][i])[0].includes(str.split('/').slice(2))) {
        parentObj[curKey][i][str.split('/')[1]] = data;
        found = true;
        break;
      }
    }
    if (!found) {
      newLang = {} 
      newLang[str.split('/')[1]] = data;
      parentObj[curKey].push(newLang);
    }
  }
  return parentObj;
}

console.log(result);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将.obj转换为.js文件

来自分类Dev

将.obj转换为.js文件

来自分类Dev

将多个文件从.LWO转换为.OBJ或类似文件

来自分类Dev

使用 FreeCAD python 将 .OBJ 文件转换为 STL

来自分类Dev

将字符串转换为JSON obj或数组JavaScript

来自分类Dev

将特殊字符串转换为json obj

来自分类Dev

如何将USDC转换为OBJ

来自分类Dev

将代码从swift转换为obj c

来自分类Dev

将Linq表达式“ obj => obj.Prop”转换为“父=> parent.obj.Prop”

来自分类Dev

获取嵌套的obj值

来自分类Dev

将 Obj 文件导入 vtk

来自分类Dev

读取obj文件!(指数)

来自分类Dev

不懂.obj文件

来自分类Dev

将OBJ导入Unity

来自分类Dev

如何将深度嵌套的JSON文件转换为CSV?

来自分类Dev

将 json obj 转为数组

来自分类Dev

将3d模型从obj,3ds转换为.ac文件格式

来自分类Dev

在 Unity 中将 .OBJ 文件文本转换为游戏对象?

来自分类Dev

可以将Obj-C AXObserverCallback转换为Swift吗?

来自分类Dev

使用Python FBX SDK将* .obj转换为* .fbx

来自分类Dev

将Javascript日期从日期值转换为日期obj

来自分类Dev

F#将obj [,]强制转换为float [,]

来自分类Dev

将datetime obj转换为可识别时区的datetime

来自分类Dev

将obj std转换为模型laravel DB :: query

来自分类Dev

将Obj-C转换为Swift ep1

来自分类Dev

如何将通用区分联盟转换为obj

来自分类Dev

如何将 osgjs 格式转换为 obj 或类似格式?

来自分类Dev

从obj-c转换为swift

来自分类Dev

将嵌套的JSON转换为CSV