根据输入和输出转换JSON

时间:2016-04-12 12:45:01

标签: javascript json

以下是一个对象数组,其值为$("div.selected").ready(function() { $("div.selected").removeClass("highlight") }); ,其输入为v,输出为i

o

通过检查每个var data = [ { v: 1, i: [], o: [1, 2, 3] }, { v: 2, i: [2], o: [4, 5, 6] ] }, { v: 3, i: [1, 4], o: [7, 8] }, { v: 4, i: [], o: [3] } ] 的输入和输出,即父子关系......来创建最终的JSON结构。

最终的JSON结构..

v

我尝试使用以下代码,但它没有正确转换对象数组......

[
    {
        v: 1,
        children: [
            {
                v: 2
            },
            {
                v: 3
            }
        ]
    },
    {
        v: 4
    }
]

3 个答案:

答案 0 :(得分:2)

我认为你这太难了。只需映射值即可。

var data = [{
  v: 1,
  i: [],
  o: [1, 2, 3]
}, {
  v: 2,
  i: [2],
  o: [4, 5, 6]
}, {
  v: 3,
  i: [1, 4],
  o: [7, 8]
}, {
  v: 4,
  i: [],
  o: [3]
}];

function transform(verticies, idProp, childProp) {
  return verticies.map(function(vertex) {
    return {
      v: vertex[idProp],
      children: vertex[childProp].filter(function(childVertex) {
        return childVertex !== vertex[idProp];
      }).map(function(childVertex) {
        return {
          v: childVertex
        };
      })
    }
  });
}

var transformed = transform(data, 'v', 'o');
document.body.innerHTML = '<pre>' + JSON.stringify(transformed, null, 4) + '</pre>';

结果

[{
    "v": 1,
    "children": [{
        "v": 2
    }, {
        "v": 3
    }]
}, {
    "v": 2,
    "children": [{
        "v": 4
    }, {
        "v": 5
    }, {
        "v": 6
    }]
}, {
    "v": 3,
    "children": [{
        "v": 7
    }, {
        "v": 8
    }]
}, {
    "v": 4,
    "children": [{
        "v": 3
    }]
}]

答案 1 :(得分:1)

您可以使用$input = $_POST['data']; 的一些循环和查找机制。

this

答案 2 :(得分:0)

这是另一种有效的方式..  示例代码

 function populateChildrenRecursively(outputTypeId, valueChainEntities, parentValueChainEntity) {
        for (var i = 0; i < valueChainEntities.length; i++) {
            if (valueChainEntities[i].valueChainEntity.valueChainEntityId != parentValueChainEntity.valueChainEntity.valueChainEntityId && hasInput(outputTypeId, valueChainEntities[i].inputs)) {
                parentValueChainEntity.valueChainEntity.items.push(valueChainEntities[i]);
                if (valueChainEntities[i].outputs.length > 0) {
                    valueChainEntities[i].valueChainEntity.items = [];
                    for (var j = 0; j < valueChainEntities[i].outputs.length; j++) {
                        populateChildrenRecursively(valueChainEntities[i].outputs[j].outputTypeId, valueChainEntities, valueChainEntities[i]);
                    }
                }
            }
        }
    }

JSON Conversion