繁体   English   中英

在 Python 中使用数组从 CSV 转换为嵌套 JSON

[英]Convert from CSV to Nested JSON with array in Python

我正在尝试从 csv 转换为复杂的嵌套 json。 下面是我的 CSV 的样子

样本 csv

标题,section_id,内容,预期

"测试用例1",1234,"测试步骤1","预期结果1"

"测试用例1",1234,"测试步骤2","预期结果2"

"测试用例1",1234,"测试步骤3","预期结果3"

预期产出

  'title': 'Test case 1',
  'section_id': 1234,
  'custom_steps_separated': [
    {
      'content': 'Test step1',
      'expected': 'Expected Result 1'
    },
    {
      'content': 'Test step2',
      'expected': 'Expected Result 2'
    },
    {
      'content': 'Test step3',
      'expected': 'Expected Result 3'
    }
  ]
}

到目前为止的代码


import pandas as pd
df = pd.read_csv('testcases.csv')
df['custom_steps_separated'] = df[['content','expected']].to_dict('records')
out = df[['title','section_id','custom_steps_separated']].to_json(orient='records', indent=4)
jsondict = json.loads(out)
for i in range(0,len(jsondict)):
 print(list(jsondict)[i])

我希望这对你的情况有用。 您可以使用groupby

import pandas as pd
df = pd.DataFrame({'title':["Test case1","Test case1","Test case1"],
                               'section_id':['1234','1234','1234'],'content':["Test step1","Test step2","Test step3"],'expected':["Expected Result1","Expected Result2","Expected Result3"]})

df.groupby(['title','section_id']).apply(lambda x: x[['content','expected']].to_dict('records'))
       .reset_index()
       .rename(columns={0:'custom_steps_separated-Data'})
       .to_json(orient='records')

我得到的输出是,

[
    {
        "title": "Test case1",
        "section_id": "1234",
        "custom_steps_separated-Data": [
            {
                "content": "Test step1",
                "expected": "Expected Result1"
            },
            {
                "content": "Test step2",
                "expected": "Expected Result2"
            },
            {
                "content": "Test step3",
                "expected": "Expected Result3"
            }
        ]
    }
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM