【问题标题】:Map Json Data to new key-value pair JavaScript object将 Json 数据映射到新的键值对 JavaScript 对象
【发布时间】:2020-03-11 19:15:16
【问题描述】:

我想将一个 json 数据映射到一个新的 javascript 对象,如下所示。这里的 json 数据是动态的,可以拥有更多用户的更多文件。组信息是新的,依赖于父子信息。谁能帮帮我?感谢您的宝贵时间。

之前:

{
  "userinfo": {
    "/home/user/main/sub/info/1stfile.txt": {
      "John": "something",
      "Mike": "something",
      "Merry": "something",
      "Susan": "something"
    },
    "/home/user/main/info/2ndfile.txt": {
      "Mulan": "something",
      "James": "something"
    },
    "/home/user/main/info/3rdfile.txt": {
      "Nancy": "something"
    },
    "/home/user/main/4thfile.txt": {
      "Kamal": "something",
      "Xian": "something",
      "Mila": "something"
    }
  }
}

之后:

{
  "name": "main",
  "children": [
    {
      "name": "1stfile",
      "children": [
        {
          "name": "John",
          "group": "1"
        },
        {
          "name": "Mike",
          "group": "1"
        },
        {
          "name": "Merry",
          "group": "1"
        },
        {
          "name": "Susan",
          "group": "1"
        }
      ],
      "group": 1
    },
    {
      "name": "2ndfile",
      "children": [
        {
          "name": "Mulan",
          "group": 2
        },
        {
          "name": "James",
          "group": 2
        }
      ],
      "group": 2
    },
    {
      "name": "3rdfile",
      "children": [
        {
          "name": "Nancy",
          "group": 3
        }
      ],
      "group": 3
    },
    {
      "name": "4thfile",
      "children": [
        {
          "name": "Kamal",
          "group": 4
        },
        {
          "name": "Xian",
          "group": 4
        },
        {
          "name": "Mila",
          "group": 4
        }
      ],
      "group": 4
    }
  ],
  "group": 0
}

我试图使用以下代码构建一个父子块

var jsonData = json["userinfo"];
var keys = Object.keys(jsonData);
console.log(keys);
let data = {};
for (var j = 0; j < keys.length; j++) {
  let g = 1;
  data[j] = { name: keys[j], group: g++ };
}
console.log(data);

这是给出以下输出

{
  0: {
    "name": "/home/user/main/sub/info/1stfile.txt",
    "group": 1
  },
  1: {
    "name": "/home/user/main/info/2ndfile.txt",
    "group": 1
  },
  2: {
    "name": "/home/user/main/info/3rdfile.txt",
    "group": 1
  },
  3: {
    "name": "/home/user/main/4thfile.txt",
    "group": 1
  }
}

值分配正确,但正在创建额外的键 (0,1,2,3)!

【问题讨论】:

  • 你能告诉我们你到目前为止做了什么吗?
  • 我已经包含了代码 sn-p。
  • 你能提供一个有效的前后吗? beforeafter 的有效示例
  • 这是我的任务的一个有效示例。我刚刚用“某物”替换了用户信息。

标签: javascript arrays json mapping key-value


【解决方案1】:

假设你需要这样的东西。

您可以使用Array.map()Object.keys() 函数进行操作。

<script>
  const beforeJSON = `{
    "userinfo": {
      "/home/user/main/sub/info/1stfile.txt": {
        "John": "something",
        "Mike": "something",
        "Merry": "something",
        "Susan": "something"
      },
      "/home/user/main/info/2ndfile.txt": {
        "Mulan": "something",
        "James": "something"
      },
      "/home/user/main/info/3rdfile.txt": {
        "Nancy": "something"
      },
      "/home/user/main/4thfile.txt": {
        "Kamal": "something",
        "Xian": "something",
        "Mila": "something"
      }
    }
  }`
  const before = JSON.parse(beforeJSON);
  const filenames = Object.keys(before.userinfo);

  const after = {
    name: 'main',
    children: [],
    group: 0,
  }

  const children = filenames.map((filename, idx) => {
    const innerChildren = Object.keys(before.userinfo[filename]).map((n) => ({
      name: n,
      group: idx + 1,
    }))
    return ({
      name: filename,
      children: innerChildren,
      group: idx + 1,
    });
  })

  after.children = children;

  console.log(after);
</script>

请在下次发布另一个问题之前格式化您的代码。

【讨论】:

  • 非常感谢,以后我会正确地格式化我的问题。
猜你喜欢
  • 1970-01-01
  • 2019-04-28
  • 2012-02-06
  • 2022-06-15
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
相关资源
最近更新 更多