Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
使用Jquery或Javascript转换特定JSON格式的字符串数组_Javascript_Jquery_Arrays_Json - Fatal编程技术网

使用Jquery或Javascript转换特定JSON格式的字符串数组

使用Jquery或Javascript转换特定JSON格式的字符串数组,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我有一个特定格式的javascript数组: var arr = ["header1", //section header false, //subsection, no "1240","1243", //assets true,"1", //subsection, yes = 1 "1344","1136", //assets true,"1", //subsection, yes = 1

我有一个特定格式的javascript数组:

var arr  = 
  ["header1",       //section header
   false,           //subsection, no
   "1240","1243",   //assets
   true,"1",        //subsection, yes = 1
   "1344","1136",   //assets
   true,"1",        //subsection, yes = 1
   "1347",          //assets
   "header2",       //section header
   false,           //subsection, no
   "1130"];         //assets
上面的数组具有一个序列:

1) 带有“header”的数组是节值

2) 数组中的“false”表示此节没有任何子节。因此,在JSON中,子值为null

3) 后跟false的是各部分的所有资产价值

4) “true”表示本节有一个小节。下一个值中的分段值后跟“true”。在我的例子中,它是1。以下是该小节的所有资产价值

5) 遇到下一个字符串为“header”的数组值时。这是下一节的开始

我必须将其转换为以下格式:

{
  "templateForm": 
    [{
      "sectionId":"header1",
      "values":[
        {
          "sub":null,
          "assets":[1240,1243]
        },
        {
          "sub":1,
          "assets":[1344,1136]
        },
        {
          "sub":1,
          "assets":[1347]
        }
        ]
    },
    {
      "sectionId":"header2",
      "values":[
        {
          "sub":null,
          "assets":[1130]
        }
        ]
    }]
}
我试了很多,但没有成功。我试图将json格式创建为字符串,但在将其解析为javascript对象时出错。请帮我解决这个问题

我的不完整代码如下:

function makeJSON(formItems) {
        var subString1 = "header";
        var strStart = '{"templateForm":[';
        var strSection = "";
        for (var i = 0; i < formItems.length; i++) {
            var isHeader = item.indexOf(subString1) !== -1;
            if(isHeader){
                strSection += '{"sectionId":'+item[i];
                while(item != true || item != false){
                }
            }

            var item = formItems[i] + "";
            console.log(item);
            if (item == "true") {
                var subSectionId = item[++i];
            } else if (item == "false") {
                var subSectionId = null;
            }
        }
        var strEnd = "]}";
        var strFinal = strStart + strSection + strEnd;
        console.log(strFinal);
        var obj = JSON.parse(strFinal);
        console.log(obj);
    }
函数makeJSON(formItems){
var subString1=“标题”;
var strStart='{“templateForm”:[';
var strSection=“”;
对于(变量i=0;i
数据源的格式有很多要求。但是如果这是您必须使用的,那么以下代码可以进行转换:

var arr=[“header1”,false,“1240”,“1243”,true,“1”,“1344”,“1136”,true,“1”,“1347”,“header2”,false,“1130”];
var结果=arr.REDUCT((acc,val)=>{
if(字符串(val).indexOf(“头”)==0){
加速推({
部门ID:val,
值:[]
});
返回acc;
}
var last=附件[附件长度-1],
lastVal=last.values[last.values.length-1];
if(typeof val=='boolean'){
最后,推({
sub:val | | null,
资产:[]
})
}else if(lastVal.sub==true){
lastVal.sub=+val;
}否则{
lastVal.assets.push(+val);
}
返回acc;
}, []);
console.log(结果);

.as console wrapper{max height:100%!important;top:0;}
数据源的格式有很多要求。但是如果这是您必须使用的,那么以下代码可以进行转换:

var arr=[“header1”,false,“1240”,“1243”,true,“1”,“1344”,“1136”,true,“1”,“1347”,“header2”,false,“1130”];
var结果=arr.REDUCT((acc,val)=>{
if(字符串(val).indexOf(“头”)==0){
加速推({
部门ID:val,
值:[]
});
返回acc;
}
var last=附件[附件长度-1],
lastVal=last.values[last.values.length-1];
if(typeof val=='boolean'){
最后,推({
sub:val | | null,
资产:[]
})
}else if(lastVal.sub==true){
lastVal.sub=+val;
}否则{
lastVal.assets.push(+val);
}
返回acc;
}, []);
console.log(结果);

.as console wrapper{max height:100%!important;top:0;}
对于插入的单个阶段,您可以使用对象的直接方法

var数组=[“header1”,false,“1240”,“1243”,true,“1”,“1344”,“1136”,true,“1”,“1347”,“header2”,false,“1130”],
结果=[],
最后={};
array.forEach(函数(a){
if(a.toString().slice(0,6)=‘header’){
last.section={sectionId:a,值:[]};
结果推送(最后一段);
回来
}
如果(a的类型=='boolean'){
last.sub={sub:null,资产:[]};
last.section.values.push(last.sub);
last.next=a;
回来
}
如果(最后一个,下一个){
last.sub.sub=+a;
last.next=false;
回来
}
最后,次级资产推送(+a);
});
console.log(结果);

.as console wrapper{max height:100%!important;top:0;}
对于插入的单个阶段,您可以使用对象的直接方法

var数组=[“header1”,false,“1240”,“1243”,true,“1”,“1344”,“1136”,true,“1”,“1347”,“header2”,false,“1130”],
结果=[],
最后={};
array.forEach(函数(a){
if(a.toString().slice(0,6)=‘header’){
last.section={sectionId:a,值:[]};
结果推送(最后一段);
回来
}
如果(a的类型=='boolean'){
last.sub={sub:null,资产:[]};
last.section.values.push(last.sub);
last.next=a;
回来
}
如果(最后一个,下一个){
last.sub.sub=+a;
last.next=false;
回来
}
最后,次级资产推送(+a);
});
console.log(结果);

.as控制台包装{最大高度:100%!重要;顶部:0;}
您尝试过什么代码?您遇到了什么问题?您遇到了什么错误?数据来自哪里?它的格式非常糟糕。@NathanP.您能给我一个好的建议吗format@Cruiser:我已经添加了代码您试图转换的代码对我来说似乎更好。数据应该已经格式化,但由于我不知道您是如何获得它的,我不知道。你试过什么代码?你在哪里卡住了?你遇到了什么错误?数据从哪里来?它的格式很糟糕。@NathanP。你能给我一个好的建议吗format@Cruiser:我