import csv
import json
def csv_to_json(csvFilePath):
jsonArray = []
decoded_file = csvFilePath.read().decode('utf-8').splitlines()
#load csv file data using csv library's dictionary reader
csvReader = csv.DictReader(decoded_file)
#convert each csv row into python dict
for row in csvReader:
#add this python dict to json array
option = [row['option1'], row['option2'], row['option3'], row['option4']]
option = filter(None, option)
newJson = {
'numb': row['numb'],
'question': row['question'],
'answer': row['answer'],
'options': option
}
jsonArray.append(newJson)
print('>>>>>>>jsonArray>>>>>>>', jsonArray)
jsonString = json.dumps(jsonArray)
print('>>>>>>>jsonString>>>>>>>', jsonString)
return jsonArray
錯誤
TypeError at /path/path
Object of type filter is not JSON serializable
>>>>>>>jsonArray>>>>>>> [{'numb': '1', 'question': 'What does HTML stand for?', 'answer': 'Hyper Text Markup Language', 'options': <filter object at 0x7f3d3459fa00>}, {'numb': '2', 'question': 'What does CSS stand for?', 'answer': 'Cascading Style Sheet', 'options': <filter object at 0x7f3d34317400>}]
如果我注釋掉# 'options': option從newJson那么它完美
uj5u.com熱心網友回復:
正如錯誤所說,過濾器物件不可序列化。
但是一個串列是
'options': list(option)
但是,我不太清楚你在過濾什么。None 型別的串列將在 JSON 陣列中變為 null
uj5u.com熱心網友回復:
JSON 不知道如何將filter物件轉換為 JSON 字串。為了放入optionJSON 字串,您需要先將其轉換為串列:
import csv
import json
def csv_to_json(csvFilePath):
jsonArray = []
decoded_file = csvFilePath.read().decode('utf-8').splitlines()
# load csv file data using csv library's dictionary reader
csvReader = csv.DictReader(decoded_file)
# convert each csv row into python dict
for row in csvReader:
# add this python dict to json array
option = [row['option1'], row['option2'], row['option3'], row['option4']]
option = list(filter(None, option))
newJson = {
'numb': row['numb'],
'question': row['question'],
'answer': row['answer'],
'options': option
}
jsonArray.append(newJson)
print('>>>>>>>jsonArray>>>>>>>', jsonArray)
jsonString = json.dumps(jsonArray)
print('>>>>>>>jsonString>>>>>>>', jsonString)
return jsonArray
uj5u.com熱心網友回復:
根據filter()檔案,內置函式沒有默認編碼器:https : //docs.python.org/3/library/json.html。
您需要根據要存盤和檢索的內容實作自定義編碼解碼器。
另一個有用的鏈接: How to make a class JSON serializable
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/351609.html
