将 JSON 对象数组转换为 CSV - Python

我已成功将简单的 JSON 转换为 CSV。当文件包含 JSON 对象数组时,我遇到了问题。我使用的csv模块不是pandas为了转换。请参考以下处理成功和失败的内容:


成功(当文件包含单个 json 对象列表/数组时):


[{"value":0.97,"key_1":"value1","key_2":"value2","key_3":"value3","key_11":"2019-01-01T00:05:00Z"}]

失败 :


[{"value":0.97,"key_1":"value1","key_2":"value2","key_3":"value3","key_11":"2019-01-01T00:05:00Z"}]

[{"value":0.97,"key_1":"value1","key_2":"value2","key_3":"value3","key_11":"2019-01-01T00:05:00Z"}]

[{"value":0.97,"key_1":"value1","key_2":"value2","key_3":"value3","key_11":"2019-01-01T00:05:00Z"}]

该json.loads函数抛出异常如下:


Extra data ; line 1 column 6789 (char 1234)

如何处理此类文件?


编辑:使用 Kinesis Firehorse 刷新此文件并推送到 S3。我正在使用 lambda 下载文件并加载它并进行转换。所以它不是.json文件。


眼眸繁星
浏览 234回答 3
3回答

梦里花落0921

像这样解析每一行:with open('input.json') as f:    for line in f:        obj = json.loads(line)

慕姐4208626

因为您的文件不是有效的 JSON。您必须逐行读取文件,然后将每一行单独转换为对象。或者,您可以像这样转换文件结构...[  {    "value": 0.97,    "key_1": "value1",    "key_2": "value2",    "key_3": "value3",    "key_11": "2019-01-01T00:05:00Z"  },  {    "value": 0.97,    "key_1": "value1",    "key_2": "value2",    "key_3": "value3",    "key_11": "2019-01-01T00:05:00Z"  },  {    "value": 0.97,    "key_1": "value1",    "key_2": "value2",    "key_3": "value3",    "key_11": "2019-01-01T00:05:00Z"  }]它将是一个有效的 JSON 文件。

aluckdog

正如 tanaydin 所说,您失败的输入不是有效的 json。它应该是这样的:[    {        "value":0.97,        "key_1":"value1",        "key_2":"value2",        "key_3":"value3",        "key_11":"2019-01-01T00:05:00Z"    },    {"value":0.97,"key_1":"value1","key_2":"value2","key_3":"value3","key_11":"2019-01-01T00:05:00Z"},    {"value":0.97,"key_1":"value1","key_2":"value2","key_3":"value3","key_11":"2019-01-01T00:05:00Z"}]我假设您通过迭代对象列表并调用json.dumps每个对象来创建 json 输出。您应该创建字典列表,然后调用json.dumps整个列表。list_of_dicts_to_jsonify = {}object_attributes = ['value', 'key_1', 'key_2', 'key_3', 'key_11']for item in list_of_objects:    # Convert object to dictionary    obj_dict = {}    for k in object_attributes:        obj_dict[k] = getattr(item, k) or None    list_of_dicts_to_jsonify.append(obj_dict)json_output = json.dumps(list_of_dicts_to_jsonify)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python