【问题标题】:Transforming a row-based JSON in a column-based JSON将基于行的 JSON 转换为基于列的 JSON
【发布时间】:2017-10-06 04:56:29
【问题描述】:

我想将基于行的 JSON 转换为基于列的 JSON。我以基于行的形式接收 JSON,并将对其进行一些可视化,这在基于列的形式中会更容易。

基于行的看起来像这样:

{
  "0": {
    "fname": "John", 
    "lname": "Miller", 
    "age": 50
  }, 
  "1": {
    "fname": "Eve", 
    "lname": "Johnson", 
    "age": 40
  }...

基于列的示例:

{
  "fname": {
    "0" : "John", 
    "1" : "Eve"
  }, 
  "lname": {
    "0" : "Miller", 
    "1" : "Johnson"
  }, 
  "age": {
    "0": 50, 
    "1" : 40
  }...

有没有比遍历所有元素并完全重写 JSON 更有效的方法?

谢谢!

【问题讨论】:

  • 结构看起来很奇怪。为什么要使用具有数值属性的对象而不是数组?
  • 数值属性只是一个例子。我写下来只是为了强调行和列之间的变化。它们不是必需的。

标签: javascript json row transform


【解决方案1】:

至少,您需要交换结果对象的键。

var data = { 0: { fname: "John", lname: "Miller", age: 50 }, 1: { fname: "Eve", lname: "Johnson", age: 40 } },
    result = Object.keys(data).reduce(function (r, k) {
        Object.keys(data[k]).forEach(function (l) {
            r[l] = r[l] || {};
            r[l][k] = data[k][l];
        });
        return r;
    }, {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案2】:

    没有比遍历每个对象更好的方法了。由于您需要映射所有值,因此您必须遍历所有键。

    【讨论】:

    • 非常感谢。我希望可能有不同的方式,但那时我将不得不使用循环。
    • 欢迎。你可以接受这个作为答案。完成该功能的实现后,将其作为库公开。可能对某些人有用。 :)
    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 2012-03-08
    • 2019-11-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多