首页 > 解决方案 > CSV -> JSON -> PostgreSQL“令牌无效”

问题描述

我有一个 CSV 文件,其中包含 1 列(“json_doc”),其中包含多行 JSON 数据。我想收集这个 json 数据并将其上传到 Postgres 数据库。行的格式为:

{"id": "0436d9b9305d", "base": {"ateco": [{"code": "46.11.03", "rootCode": "G", "description": "Agenti e rappresentanti di animali vivi"}], "founded": "1972-07-10", "legalName": "COBEM - S.R.L.", "legalForms": [{"name": "Società Di Capitale", "level": 1}, {"name": "Società A Responsabilità Limitata", "level": 2}]}, "name": "COBEM - S.R.L.", "people": {"items": [{"name": "45808b0b5b5affa871c8e91169bb10c6930fac56", "givenName": "64e4393f477394f11f6477ca76395ed469548865", "familyName": "68ee44f14dc54d664dffe63195d42a14988b69bb"}]}, "country": "it", "locations": {}}

有数百万行,并非所有格式都是一致的,即一些嵌套字典在结构上与其他字典不同。

我采用了其中的 5 行,并应用了以下 Python:

import pandas as pd

df = pd.read_csv('samplecol.csv')
df = df.to_json('data.json')

然后我使用https://jsonlint.com来检查 JSON,一切都很好。

我有一个 JSON 文件、data.json 和一个 PostgreSQL 数据库,并且想将 data.json 导入 Postgres。

我运行以下命令来创建一个表:

SN_ITA_test=# CREATE TABLE jsons(ID serial NOT NULL PRIMARY KEY, info jsonb NOT NULL);

当我尝试使用以下方式将文件上传到 Postgres 时:

SN_ITA_test=# \copy jsons (info) FROM 'data.json';

我得到错误:

ERROR:  invalid input syntax for type json
DETAIL:  Token "id" is invalid.
CONTEXT:  JSON data, line 1: {"json_doc":{"0":"{"id...
COPY jsons, line 1, column info: "{"json_doc":{"0":"{"id": "0436d9b9305d", "base": {"ateco": [{"code": "46.11.03", "rootCode": "G", "d..."

标签: pythonjsonpostgresqlpandas

解决方案


推荐阅读