为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

眼眸繁星 2021-10-26 18:06:59
我已成功将简单的 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文件。
查看完整描述

3 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

像这样解析每一行:


with open('input.json') as f:

    for line in f:

        obj = json.loads(line)


查看完整回答
反对 回复 2021-10-26
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

因为您的文件不是有效的 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 文件。


查看完整回答
反对 回复 2021-10-26
?
aluckdog

TA贡献1847条经验 获得超7个赞

正如 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)


查看完整回答
反对 回复 2021-10-26
  • 3 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信