One master item logic is pretty bad. You need to split it up to the base struct and then optional additions to the item.
Main struct would have for instance
item name
item description
item rarity
then you would have a list of sub structs that would define extra attributes
stat modifier (+ 5 to strength)
elemental damage
knockback
etc
you could have extra info like: unsellable, quest item etc
This would map onto a relative database where you would have one table that has the base item and a second table with the equivalent of the sub-struct that has a foreign key that would map onto the main items id.
The sub struct could also map to an attribute dictionary (then it would have a second foreign key to map onto a mod). This would make the data keep the third normal form.