ファイルにある値をjson ldからcsvに抽出しようとしています。私が直面している問題がいくつかあります。1. ほとんどの場合、さまざまなフィールドで読み取られる値が切り捨てられます。残りのケースでは、他のフィールドの値が他のフィールドに表示されています。2. 約 4,000 行の後に「追加データ」というエラーも表示されます。ファイルは非常に大きいです(半GB)。コードの短縮版を添付しています。どこが間違っているのか教えてください。
入力ファイル - 短縮してここに保存しました。ここに置く方法はありませんでした。
https://github.com/Architsi/json-ld-issue
このスクリプトを書いてみましたが、複数のオンラインコンバーターも試しました
import csv, sys, math, operator, re, os, json, ijson
from pprint import pprint
filelist = []
for file in os.listdir("."):
if file.endswith(".json"):
filelist.append(file)
for input in filelist:
newCsv = []
splitlist = input.split(".")
output = splitlist[0] + '.csv'
newFile = open(output, 'w', newline='') #wb for windows, else you'll see newlines added to csv
# initialize csv writer
writer = csv.writer(newFile)
#Name of the columns
header_row = ('Format', 'Description', 'Object', 'DataProvider')
writer.writerow(header_row)
with open(input, encoding="utf8") as json_file:
data = ijson.items(json_file, 'item')
#passing all the values through try except
for s in data:
source = s['_source']
try:
source_resource = source['sourceResource']
except:
print ("Warning: No source resource in record ID: " + id)
try:
data_provider = source['dataProvider'].encode()
except:
data_provider = "N/A"
try:
_object = source['object'].encode()
except:
_object = "N/A"
try:
descriptions = source_resource['description']
string = ""
for item in descriptions:
if len(descriptions) > 1:
description = item.encode() #+ " | "
else:
description = item.encode()
string = string + description
description = string.encode()
except:
description = "N/A"
created = ""
#writing it to csv
write_tuple = ('format', description, _object, data_provider)
writer.writerow(write_tuple)
print ("File written to " + output)
newFile.close()
私が得ているエラーはこれです - raise common.JSONError('Additional Data') 期待される結果は、すべての列と正しい値を含む csv ファイルです