【问题标题】:Read JSON object after conversion from CSV format从 CSV 格式转换后读取 JSON 对象
【发布时间】:2021-03-09 08:30:54
【问题描述】:

我使用 csv 和 json 库将 csv 文件转换为 json 文件。 csv文件如下(只有一列):

document
"[{'param1': 'value1', 'param2': 'value2', 'param3': value3, 'param4': value4}]"
"[{'param1': 'value1', 'param2': 'value2', 'param3': value3, 'param4': value4}]"
"[{'param1': 'value1', 'param2': 'value2', 'param3': value3, 'param4': value4, 'param5': 'value5',  'param6': {'param6-1': 'value6-1', 'param6-2': [value6-2-1, value6-2-2]}}]"

json文件如下(转换后):

[
    {
        "document": "[{'param1': 'value1', 'param2': 'value2', 'param3': value3, 'param4': value4}]"
    },
    {
        "document": "[{'param1': 'value1', 'param2': 'value2', 'param3': value3, 'param4': value4}]"
    },
    {
        "document": "[{'param1': 'value1', 'param2': 'value2', 'param3': value3, 'param4': value4, 'param5': 'value5',  'param6': {'param6-1': 'value6-1', 'param6-2': [value6-2-1, value6-2-2]}}]"
    }
]

问题是我应该得到这个结果:

[
    {
        "document": {'param1': 'value1', 'param2': 'value2', 'param3': value3, 'param4': value4},
                    {'param1': 'value1', 'param2': 'value2', 'param3': value3, 'param4': value4},
                    {'param1': 'value1', 'param2': 'value2', 'param3': value3, 'param4': value4, 'param5': 'value5',  'param6': {'param6-1': 'value6-1', 'param6-2': [value6-2-1, value6-2-2]}}
    }
]

以下代码从 CSV 转换为 JSON:

def csv_to_json(csvFilePath, jsonFilePath):
    jsonArray = []

    # read csv file
    with open(csvFilePath, encoding='utf-8') as csvf:
        # load csv file data using csv library's dictionary reader
        csvReader = csv.DictReader(csvf)

        # convert each csv row into python dict
        for row in csvReader:
            # add this python dict to json array
            jsonArray.append(row)

    # convert python jsonArray to JSON String and write to file
    with open(jsonFilePath, 'w', encoding='utf-8') as jsonf:
        jsonString = json.dumps(jsonArray, indent=4)
        jsonf.write(jsonString)


csvFilePath = r'DataCSV.csv'
jsonFilePath = r'DataJSon.json'
csv_to_json(csvFilePath, jsonFilePath)

问题是:转换是否正确完成?在那种情况下,如何询问复杂的值?比如param6-2?

感谢您的帮助

【问题讨论】:

    标签: python json csv


    【解决方案1】:

    document 列中的数据似乎几乎是 Python 格式的数据。您的示例虽然格式错误,但应引用所有值,例如:

    document
    "[{'param1': 'value1', 'param2': 'value2', 'param3': 'value3', 'param4': 'value4'}]"
    "[{'param1': 'value1', 'param2': 'value2', 'param3': 'value3', 'param4': 'value4'}]"
    "[{'param1': 'value1', 'param2': 'value2', 'param3': 'value3', 'param4': 'value4', 'param5': 'value5',  'param6': {'param6-1': 'value6-1', 'param6-2': ['value6-2-1', 'value6-2-2']}}]"
    

    假设确实如此,那么可以使用ast.literal_eval() 转换这些行以将数据读回,并将结果数据转换回JSON格式,如下所示:

    import json
    import csv
    import ast
    
    with open('DataCSV.csv', encoding='utf-8') as f_input, open('DataJSon.json', 'w', encoding='utf-8') as f_output:
        csv_input = csv.DictReader(f_input)
        data = [ast.literal_eval(row['document']) for row in csv_input]
        f_output.write(json.dumps([{'document' : data}], indent=4))
    

    这将为您提供一个输出 DataJSon.json 文件,其中包含:

    [
        {
            "document": [
                [
                    {
                        "param1": "value1",
                        "param2": "value2",
                        "param3": "value3",
                        "param4": "value4"
                    }
                ],
                [
                    {
                        "param1": "value1",
                        "param2": "value2",
                        "param3": "value3",
                        "param4": "value4"
                    }
                ],
                [
                    {
                        "param1": "value1",
                        "param2": "value2",
                        "param3": "value3",
                        "param4": "value4",
                        "param5": "value5",
                        "param6": {
                            "param6-1": "value6-1",
                            "param6-2": [
                                "value6-2-1",
                                "value6-2-2"
                            ]
                        }
                    }
                ]
            ]
        }
    ]
    

    【讨论】:

      猜你喜欢
      • 2012-06-30
      • 2019-02-01
      • 1970-01-01
      • 2015-03-26
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      相关资源
      最近更新 更多