abstract out component.json

so builder could be used on non component.json files