Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JSON对象数组转换为CSV-Python_Python_Json_Csv - Fatal编程技术网

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

将JSON对象数组转换为CSV-Python,python,json,csv,Python,Json,Csv,我已经成功地将一个简单的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

我已经成功地将一个简单的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"}]
json.loads
函数引发异常,如下所示:

Extra data ; line 1 column 6789 (char 1234)
如何处理这些文件

编辑: 该文件使用Kinesis Firehorse刷新并推送到S3。 我正在使用lambda下载文件并加载和转换。
因此它不是一个.json文件。

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

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

按如下方式解析每一行:

with open('input.json') as f:
    for line in f:
        obj = json.loads(line)

按如下方式分析每一行:

with open('input.json') as f:
    for line in f:
        obj = json.loads(line)

正如tanaydin所说,失败的输入不是有效的json。它应该是这样的:

[
{
“值”:0.97,
“键1”:“值1”,
“键2”:“值2”,
“键3”:“值3”,
“图例11”:“2019-01-01T00:05:00Z”
},
{“值”:0.97,“键1”:“值1”,“键2”:“值2”,“键3”:“值3”,“键11”:“2019-01-01T00:05:00Z”},
{“值”:0.97,“键1”:“值1”,“键2”:“值2”,“键3”:“值3”,“键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)

正如tanaydin所说,失败的输入不是有效的json。它应该是这样的:

[
{
“值”:0.97,
“键1”:“值1”,
“键2”:“值2”,
“键3”:“值3”,
“图例11”:“2019-01-01T00:05:00Z”
},
{“值”:0.97,“键1”:“值1”,“键2”:“值2”,“键3”:“值3”,“键11”:“2019-01-01T00:05:00Z”},
{“值”:0.97,“键1”:“值1”,“键2”:“值2”,“键3”:“值3”,“键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)