I am trying to run a project which I did not code my self and I am facing this issue when running the code, I have holidays.json collection:
and I have this part of code to parse holidays from this json:
def parse_holidays():
holidays = db.holidays.find_one({}, {'_id': 0})
for holiday in holidays:
holidays[holiday]['date'] = datetime.strptime(holidays[holiday]['date'], '%d/%m/%Y').date()
return holidays
and I am getting the error:
holidays[holiday]['date'] = datetime.strptime(holidays[holiday]['date'], '%d/%m/%Y').date() TypeError: string indices must be integers
Any idea how to solve it? the code is in python, using Flask.
CodePudding user response:
holidays[holiday]['date']
holiday value is an object but you are using it as a string to reach a variable. Instead of the way above, you should use the method below.
holiday['date'] = datetime.strptime(holiday['date'], '%d/%m/%Y').date()
CodePudding user response:
db.holidays.find_one()
returns a single document of your database.
Therefore holidays
is a dictionary, e.g { "date": "27/3/2021", "taoz": "friday_holiday_evening" }
.
When you loop over it, you're looping over its keys and thus holiday
takes the values "date" and "taoz". As a consequence holidays[holiday]
is looping over the dictionary values, which are all strings.
holidays[holiday]['date']
is therefore a nonsense, since you're trying to index a string (holidays[holiday]
) using a non-numeric index ('date'
).
In order to make your code working, try to replace find_one
with find
.