moving away from JSON::XS, using Mojo::DOM to avoid extra dependencies