如何将多值CSV转换为Json

时间:2019-06-18 11:53:02

标签: python json linux pandas dataframe

我有一个包含4列数据的csv文件,如下所示。

type,MetalType,Date,Acknowledge     
Metal,abc123451,2018-05-26,Success
Metal,abc123452,2018-05-27,Success
Metal,abc123454,2018-05-28,Failure
Iron,abc123455,2018-05-29,Success
Iron,abc123456,2018-05-30,Failure

(我只是在上面的示例数据中提供了标头,但就我而言,我在数据中没有标头)

如何将以上csv文件转换为以下格式的Json ...

第一列:属于-> "type": "Metal"

第二列:MetalType: "values" : "value": "abc123451"

第三列:"Date": "values":"value": "2018-05-26"

第4列:"Acknowledge": "values":"value": "Success"

,其余所有列均为默认值。

按照以下格式,

{
  "entities": [
    {
      "id": "XXXXXXX",
      "type": "Metal",
      "data": {
        "attributes": {
          "MetalType": {
            "values": [
              {
                "source": "XYZ",
                "locale": "Australia",
                "value": "abc123451"
              }
            ]
          },
          "Date": {
            "values": [
              {
                "source": "XYZ",
                "locale": "Australia",
                "value": "2018-05-26"
              }
            ]
          },
          "Acknowledge": {
            "values": [
              {
                "source": "XYZ",
                "locale": "Australia",
                "value": "Success"
              }
            ]
          }
        }
      }
      }
    ]
    }

1 个答案:

答案 0 :(得分:-1)

即使jww是正确的,我也为您构建了一些东西:

我使用熊猫导入csv:

df = pd.read_csv('data.csv')

然后,我为要添加的字典创建一个模板:

d_json = {"entities": []}
template = {
      "id": "XXXXXXX",
      "type": "",
      "data": {
        "attributes": {
          "MetalType": {
            "values": [
              {
                "source": "XYZ",
                "locale": "Australia",
                "value": ""
              }
            ]
          },
          "Date": {
            "values": [
              {
                "source": "XYZ",
                "locale": "Australia",
                "value": ""
              }
            ]
          },
          "Acknowledge": {
            "values": [
              {
                "source": "XYZ",
                "locale": "Australia",
                "value": ""
              }
            ]
          }
        }
      }
      }

现在您只需要填写字典:

for i in range(len(df)):
    d = template
    d['type'] = df['type'][i]
    d['data']['attributes']['MetalType']['values'][0]['value'] = df['MetalType'][i]
    d['data']['attributes']['Date']['values'][0]['value'] = df['Date'][i]
    d['data']['attributes']['Acknowledge']['values'][0]['value'] = df['Acknowledge'][i]

    d_json['entities'].append(d)

我知道我遍历df的方式有点丑陋,也许有人知道更干净的方式。

干杯!