我正在尝试将非常大的.json文件转换为.csv文件。这是我一直在使用的json文件的示例。 我将直接从期刊出版商处以相同的格式获取文件。
主要目的是从.json文件中提取所有组件,并将信息放入我们的数据库中。
下面是我尝试过的代码。
import csv, json, sys
if sys.argv[1] is not None and sys.argv[2] is not None:
fileInput = sys.argv[1]
fileOutput = sys.argv[2]
inputFile = open(fileInput, encoding="utf8") #open json file
outputFile = open(fileOutput, 'w') #load csv file
data = json.load(inputFile) #load json content
inputFile.close() #close the input file
output = csv.writer(outputFile) #create a csv.write
output.writerow(data[0].keys()) # header row
for row in data:
output.writerow(row.values()) #values row
我收到此错误:
json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 542)
答案 0 :(得分:2)
无效的json。字节偏移量0上的开括号用字节偏移量383上的闭合括号闭合,然后在字节偏移量386上创建了另一个括号,在字节偏移量386上在偏移量383上的闭合括号之外的新backet在json中是非法的,右括号后唯一合法的东西是空格(空格,制表符,换行符)
看起来很像100个单独的json,它们都是以行分隔的,但是没有简单的解析方法,因为有效的json可能还包含换行符。如果数据提供者可以保证自己的json绝不包含换行符,或者它们的所有换行符均采用除使用十六进制0A字节以外的其他方式进行编码(例如,使用十六进制5C6E而不是十六进制0A编码),则可以将json拆分用换行符..但是,如果数据提供者的json可能包含换行符,则该方法不可靠。 (并且json规范允许在jsons中使用换行符,0x0A字节,因此这将要求您的数据提供者仅使用缺少换行符的json子集。。如果您的提供者正在寻找此问题的快速解决方案:请使用NULL-字节(十六进制00)作为分隔符,而不是十六进制0x0A,因为json从不包含空字节,因此始终必须将这些字节以json编码为“ \ u0000”,然后您可以可靠地将json按空字节分割)>
当我尝试将所有100行解析为单独的json时,会发生以下情况:使用代码将它们按0x0A字节拆分:
<?php
$jsons=file_get_contents("https://pastebin.com/raw/p9NbH2tG");
json_decode($jsons);
echo json_last_error_msg(),PHP_EOL;
$jsons=explode("\n",$jsons);
foreach($jsons as $json){
json_decode($json);
echo json_last_error_msg(),PHP_EOL;
}
输出:
$ php foo.php
Syntax error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
No error
如您所见,文件中的每一行都包含有效的json,但总体而言,它不是有效的json。但是用换行符分割它们并不是一种可靠的方法,因为它在测试文件中的100个json中都没有换行符,所以它只能在这里工作。
答案 1 :(得分:1)
这看起来很像这里Django convert JSON to CSV
的问题您可以分享所得到的json响应示例吗?尝试解码多个字典等可能存在问题。