如何从 javascript 中的字符串数组构建动态 json 文档

How to build up a dynamic json document from an array of strings in javascript

首先我会说我知道如何使用 javascript JSON 库,我的问题没有那么简单,所以请阅读详细信息而不仅仅是标题,因为标题没表达好...

我想要实现的是将 csv 转换为 JSON 文档,但使用动态模式将 csv 的不同模式映射到定义的文档模式

我有一个 JSON 文档,其中包含字符串键,例如 "Field1"、"Field2" 等.... 相应的值是一个竖线分隔的字符串,它包含第一个分隔符之前的文档类型,然后分隔符中的每个字符串构建一个 "Path" 我想创建的动态 json 文档...

因此 csv 进来并转换为 json.....

"Field1" 在上传的 CSV 中包含值 "Potatoes"

我们检索 "Field1" 的竖线分隔字符串,其值为“1|Vegetables|RootVeg”

因此,我需要动态构建 json 文档,以便此字段对应的文档部分看起来像

{ "Vegetables" : { "RootVeg" : "Potatoes"} }

希望这是有道理的....下面是我尝试构建它的各种 foreach 循环....

                var vesselprimary = [];
                var vesselsecondary = [];
                angular.forEach(value, function (value2, key2) {
                    var pipedValue = data[0][key2];
                    console.log("pipedvalue", pipedValue);
                    console.log("value2", value2);
                    var arrayValues = pipedValue.split("|");
                    if (arrayValues[0] === 1) {
                        //Create the VesselPrimary JSON object to put into the body of the post

                        if (arrayValues.count > 2) {
                            vesselprimary[arrayValues[1]] = {};
                            vesselprimary[arrayValues[1]][arrayValues[2]] = value2;
                        } else {
                            vesselprimary[arrayValues[1]] = value2;

                        }
                    } else {
                        //Create the VesselSecondary JSON object to put into the body of the post
                        if (arrayValues.count > 2) {
                            vesselsecondary[arrayValues[1]] = {};
                            vesselsecondary[arrayValues[1]][arrayValues[2]] = value2;
                        } else {
                            vesselsecondary[arrayValues[1]] = value2;

                        }
                    }

                });
                //console.log(vesselprimary);
                this.push(vesselprimary);
            }, jsonArr);

但我的输出并不令人印象深刻....

"[[],[],[],[],[],[],[],[],[]]"

最后看来,最好的方法是将其实际构建为字符串,然后使用第 3 方将其转换为 JSON...不确定这是不是这样做的最佳实践方法,但它似乎相对有效......显然我很想听听另一种方法,因为构建字符串对我来说似乎总是最后的努力!!

var csvObj = JSON.parse(json);
angular.forEach(csvObj, function(value, key2) {

var actualJsonPrimary = {};
var actualJsonSecondary = {};
var jsonStrPrim = "{";
var jsonStrSec = "{";
angular.forEach(value, function(value2, key2) {
       var pipedValue = data.data[0][key2];
       var arrayValues = pipedValue.split("|");
       if (arrayValues[0] === "") return;
       if (arrayValues[0] === "1") {
       if (arrayValues.length > 2) {
          jsonStrPrim += " '"
          + arrayValues[1].toString() + "' :  { '"
          + arrayValues[2].toString() + "' : "
          + "'" + value2 + "'" + " },";
              } else {
              jsonStrPrim += " '"
              + arrayValues[1].toString() + "' : "
              + "'" + value2 + "'"
              + " ,";
          }
        } else {
            if (arrayValues.length > 2) {
               jsonStrSec += " '"
               + arrayValues[1].toString() + "' :  { '"
               + arrayValues[2].toString() + "' : "
               + "'" + value2 + "'"
               + " },";
            } else {
               jsonStrSec += " '"
               + arrayValues[1].toString() + "' : "
               + "'" + value2 + "'"
               + " ,";
               }
            }
         });
         jsonStrPrim += "}";
         jsonStrSec += "}";
         actualJsonPrimary = eval("(" + jsonStrPrim + ")");
         actualJsonSecondary = eval("(" + jsonStrSec + ")");
         $http.post('http://myurl/api/sausages',
         JSON.stringify(actualJsonPrimary),
         {
              headers: {
               'Content-Type': 'application/json'
              }
         }
         ).then(function(data) {
             deferredObject.resolve(data.data);

         },
          function(err) {
              console.log("Error posting to API", err);
         });
       });

对于这种不可靠的格式,我们深表歉意,但希望这可以让某人知道如何做得更好!!