DetteMan, I am working with something like this in my autorunner game. I have thought out several ways to do this, and this is what we went with.
For each spawnable item, I store a spawn weight. Each time an item is about to be spawned, a random number score is picked for each item between 0 and that item's spawn weight. The item with the highest randomly picked number score is the one that is spawned. Throughout the game, each level of my game raises or lowers the spawn weight of each item, effectively controlling the probability of the item winning a spawn choice. I store all the spawn weights, and the changes to spawn weight for each level in JSON and dictionaries.
None of the spawning code has to change for each level, only the spawn weights. I can dynamically turn off an item by giving it a spawn weight of 0, or make an item more likely to spawn by giving it a higher weight than another item.
You could also store for each level the number of enemies to generate and just keep a counter as they spawn to figure out when to move to the next level, and load the next set of weights and values from JSON.