【问题标题】:JSON to CSV for certain keys某些键的 JSON 到 CSV
【发布时间】:2021-10-09 20:05:06
【问题描述】:

我有一个巨大的 json 文件,我只需要将一些对象键转换为 csv。以下是 json 的样例:

这里还有一些格式化的原始样本数据,而不仅仅是截图:

    {
  "1234567890": {
    "id": "sdggdfgfhfgdhfg",
    "cards": {
      "252632123": {
        "id": "id_554874455544456646",
        "fingerprint": "fsadljfhnsdikiubcb",
        "last4": "5555",
        "exp_month": 12,
        "exp_year": 2024,
        "brand": "Visa"
      }
    }
  },
  "2345678912": {
    "id": "sdggdfgfhfgdhfg",
    "cards": {
      "252632123": {
        "id": "id_554874455544456646",
        "fingerprint": "fsadljfhnsdikiubcb",
        "last4": "5555",
        "exp_month": 12,
        "exp_year": 2024,
        "brand": "Visa"
      }
    }
  },
  "3456789012": {
    "id": "sdggdfgfhfgdhfg",
    "cards": {
      "252632123": {
        "id": "id_554874455544456646",
        "fingerprint": "fsadljfhnsdikiubcb",
        "last4": "5555",
        "exp_month": 12,
        "exp_year": 2024,
        "brand": "Visa"
      }
    }
  }
}

我想知道是否有人可以为我指出创建 csv 的最佳方法的正确方向,该 csv 创建 4 列,其中突出显示的值在上面的屏幕截图中突出显示?所以我要寻找的输出是这样的:

我可以用 Node.js 做到这一点吗?也许其他一些图书馆正是这样做的? python的工作?我更喜欢某种 Javascript 解决方案,但我愿意接受任何建议。

谢谢!

【问题讨论】:

  • 预期输出是什么?
  • 自己编写脚本似乎相当简单。遍历所有记录键,然后遍历键中的所有卡片,并为每个记录卡组合输出一行包含您关心的内容的文本。
  • 你说它是巨大的。它会一次全部放入 RAM 吗?

标签: javascript python node.js json csv


【解决方案1】:

试试这个代码

source = {
  "1234567890": {
    "id": "sdggdfgfhfgdhfg",
    "cards": {
      "252632123": {
        "id": "id_554874455544456646",
        "fingerprint": "fsadljfhnsdikiubcb",
        "last4": "5555",
        "exp_month": 12,
        "exp_year": 2024,
        "brand": "Visa"
      }
    }
  },
  "2345678912": {
    "id": "sdggdfgfhfgdhfg",
    "cards": {
      "252632123": {
        "id": "id_554874455544456646",
        "fingerprint": "fsadljfhnsdikiubcb",
        "last4": "5555",
        "exp_month": 12,
        "exp_year": 2024,
        "brand": "Visa"
      }
    }
  },
  "3456789012": {
    "id": "sdggdfgfhfgdhfg",
    "cards": {
      "252632123": {
        "id": "id_554874455544456646",
        "fingerprint": "fsadljfhnsdikiubcb",
        "last4": "5555",
        "exp_month": 12,
        "exp_year": 2024,
        "brand": "Visa"
      }
    }
  }
}

for key in source:
   record = []
   record.append(key)
   record_id = list(source[key]['cards'].keys())[0]
   record.append(record_id)
   exp_m = source[key]['cards'][record_id]['exp_month']
   exp_y = source[key]['cards'][record_id]['exp_year']
   record.append(exp_m)
   record.append(exp_y)
   print(record)

【讨论】:

    【解决方案2】:

    您可以在 NPM 上使用 CSV 包,或者自己发出 CSV。在这两种情况下,您都必须遍历数组来决定要发出什么(通过将其存储在数组中以传递给模块,或者直接将一行发送到输出文件)。遍历您的数据将如下所示:

    const data = {
        "1234567890": {
            "id": "sdggdfgfhfgdhfg",
            "cards": {
                "252632123": {
                    "id": "id_554874455544456646",
                    "fingerprint": "fsadljfhnsdikiubcb",
                    "last4": "5555",
                    "exp_month": 12,
                    "exp_year": 2024,
                    "brand": "Visa"
                }
            }
        },
        "2345678912": {
            "id": "sdggdfgfhfgdhfg",
            "cards": {
                "252632123": {
                    "id": "id_554874455544456646",
                    "fingerprint": "fsadljfhnsdikiubcb",
                    "last4": "5555",
                    "exp_month": 12,
                    "exp_year": 2024,
                    "brand": "Visa"
                }
            }
        },
        "3456789012": {
            "id": "sdggdfgfhfgdhfg",
            "cards": {
                "252632123": {
                    "id": "id_554874455544456646",
                    "fingerprint": "fsadljfhnsdikiubcb",
                    "last4": "5555",
                    "exp_month": 12,
                    "exp_year": 2024,
                    "brand": "Visa"
                }
            }
        }
    };
    
    for (const record_id in data) {
        const { cards } = data[record_id];
        for (const card_id in cards) {
            const { exp_month, exp_year } = cards[card_id];
            console.log({ record_id, card_id, exp_month, exp_year });
        }
    }

    这会为每张卡片输出一行,包括它所属的record_id。此时,将其格式化为 CSV 并写入文件或将其传递给为您将其格式化为 CSV 的模块。

    【讨论】:

      猜你喜欢
      • 2019-09-16
      • 1970-01-01
      • 2021-12-12
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 2012-05-28
      • 2016-11-01
      相关资源
      最近更新 更多