Json( const typename std::enable_if< std::is_constructible<Json, decltype(std::declval<V>().begin()->first)>::value, V >::type& v ) : Json(array(v.begin(), v.end())) {}
Json( const typename std::enable_if< std::is_constructible<std::string, decltype(std::declval<M>().begin()->first)>::value && std::is_constructible<std::string, decltype(std::declval<M>().begin()->second)>::value, M >::type& m ) : Json(object(m.begin(), m.end())) {}