Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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
Javascript 将json转换为其他json结构_Javascript_Arrays_Ecmascript 6_Functional Programming - Fatal编程技术网

Javascript 将json转换为其他json结构

Javascript 将json转换为其他json结构,javascript,arrays,ecmascript-6,functional-programming,Javascript,Arrays,Ecmascript 6,Functional Programming,我有一个具有此结构的对象数组: const treeData = [ { 0: ["0-0", "0-1"] }, { 1: ["1-0", "1-1"] } ] 它可能更深,但数组数据总是json或字符串 const treeData = [ { 0: ["0-0", "0-1"] }, { 1: ["1-0", "1-1"] }, 2, 3 ] 我想得到这样的东西: const treeDataResult = [ { label: "0",

我有一个具有此结构的对象数组:

const treeData = [
  { 0: ["0-0", "0-1"] },
  { 1: ["1-0", "1-1"] }
]
它可能更深,但数组数据总是json或字符串

const treeData = [
  { 0: ["0-0", "0-1"] },
  { 1: ["1-0", "1-1"] },
    2,
    3
]
我想得到这样的东西:

const treeDataResult = [
  {
    label: "0",
    value: "0",
    children: [
      {
        label: "0-0",
        value: "0-0"
      },
      {
        label: "0-1",
        value: "0-1",
      }
    ]
  },
  {
    label: "1",
    value: "1",
    children: [
      {
        label: "1-0",
        value: "1-0",
      },
      {
        label: "1-1",
        value: "1-1",
      }
    ]
  },
  { 
    label: "2",
    value: "2"
  },
  { 
    label: "3",
    value: "3"
  }
]
我现在的代码是:

const treeData=[
{ "0": ["0-0", "0-1"] },
{ "1" : ["1-0", "1-1"] }
];
const convertNode=(parentNode)=>
parentNode.map(
childnode=>{
if(typeof(childNode)==“string”)
返回{
标签:childNode,
值:childNode
}
其他的
返回
childNode.map((key,val)=>
({
标签:键,
值:键,
子节点:convertNode(val)
})
)
}
)
var treeDataResult=convertNode(treeData);
console.log(treeDataResult)如果数据的形状正确,我已使用reduce和map将数据转换为正确的形状,并使用rest操作符,以便对象位于一个数组中

const treeData=[
{
0: ["0-0", "0-1"]
},
{
1: ["1-0", "1-1"]
},
{
2:null
},
{
3: []
},
{
4: ["0-1"]
}
]
const changeShape=data=>{
返回数据.reduce((上一个,当前)=>[…上一个,…形状(当前)],[]);
}
constshape=item=>Object.keys(item).map(key=>data(item,key));
常量数据=(项,键)=>{
return!item[key]| |!item[key]。长度>0?
labelValue(键):
{
…labelValue(键),
子项:项[key].map(i=>labelValue(i))
}
}
常数labelValue=v=>{
返回{
标签:v,
值:v
}
}

console.log(changeShape(treeData))
如果使用
JSON.parse
获取数据,您可以尝试以下方法:

const treeDataResult = [
  {
    label: "0",
    value: "0",
    children: [
      {
        label: "0-0",
        value: "0-0"
      },
      {
        label: "0-1",
        value: "0-1",
      }
    ]
  },
  {
    label: "1",
    value: "1",
    children: [
      {
        label: "1-0",
        value: "1-0",
      },
      {
        label: "1-1",
        value: "1-1",
      }
    ]
  },
  { 
    label: "2",
    value: "2"
  },
  { 
    label: "3",
    value: "3"
  }
]
var j='[{“0”:[“0-0”,“0-1”]},{“1”:[“1-0”,“1-1”]},2,3]'
var o=JSON.parse(j,(k,v)=>(k=v.constructor)==Array?v:
k!==对象({label:v,value:v}):
({label:k=Object.keys(v[0],值:k,子项:v[k]}))
console.log(o)
原始解决方案

const treeData=[
{ 0 : ["0-0", "0-1"] },
{ 1 : ["1-0", "1-1"] }
]
设treeDataResult=[];
对于(i=0;ilog(JSON.stringify(treeDataResult,null,4))在当前代码中什么不起作用?
2
3
类型将是
“数字”
,而不是
“字符串”
。另外,如果您的节点是一个对象,它可能不是数组-您需要实际获取您(ab)用作标签的单个键。返回后不能有enter。如果您想将其放在新行上,请执行以下操作:
return((这里的新行ok)childNode.map…
您将JavaScript对象误认为是JSON。它们不一样。JSON总是一个字符串。当键是变量时,像
{0:“foo”}
{1:“bar”}
这样的对象是错误的。为了让程序提取键的值,必须使用
Object.keys
Object.entries
。与
{key:0,value:“foo”}
相比,其中
key
value
是已知的–提取每个值只需读取它们各自的属性即可。