【问题标题】:Transform custom Json (object) in Array在数组中转换自定义 Json(对象)
【发布时间】:2021-05-11 23:12:53
【问题描述】:

我需要有关此 JSON 的帮助。 我需要将一个json转换成下面的数组格式,问题是一个children属性可以无限生成,有人知道怎么做吗? 我无法想象如何循环这个 Json 接口示例为:

`interface User {
  id: string;
  name: string;
  children?: any;
  level: number;
}`


``` {
  '0': {
    id: '2469bdab-23b5-4cb8-90c9-c609a49410b0',
    name: 'Richard Paul M.',
    children: {
      '0': {
        id: '97cd3a19-0f1c-4248-a84c-a1f5a0093a89',
        name: 'Luis F. Doris',
        children: {
          '0': {
            id: '6410eff5-5aff-46fd-bb08-ed90581007b4',
            name: 'Maurice Rudolf Ludwig',
            children: {
              '0': {
                id: '35996ee4-74a6-4343-ba5e-9700c24bee11',
                name: 'Joseph E. James A.',
                children: {
                  '0': {
                    id: '59fdebaf-0229-4d27-901d-4cfbb4cf81de',
                    name: 'Alan G. William',
                    children: {},
                    level: 4
                  }
                },
                level: 3
              ......
```

【问题讨论】:

  • 首先你应该用JSON.parse解析JSON。可能您必须修复格式。您的 JSON 无效。键和字符串在 JSON 中必须双引号。然后您可以使用Object.values 将对象转换为数组。
  • 你的意思是children: User[];而不是children?: any;
  • 是的,孩子们:用户[];
  • 第一步应该是修复 JSON。无效。

标签: javascript arrays json typescript


【解决方案1】:

你需要递归地将你的对象转换成一个数组,这很简单:

interface User {
    id: string;
    name: string;
    children?: User[];
    level: number;
}

const getUser = (user: User) => {
    const result: User = {
        id: user.id,
        name: user.name,
        level: user.level,
    };
    if (user.children) {
        result.children = Object.keys(user.children).map(key => getUser(user.children[key]));
    }

    return result;
};

const inputJson = {}; // Your input object here;

const endResult = Object.keys(inputJson).map(key => getUser(inputJson[key]));

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多