Map[String, T]
work as you expect.
Note that you need a JsonRW[T]
given instance.
Map(
"a" -> 5,
"b" -> 123
).toJson
// {"a":5,"b":123}
""" {"a":5,"b":123} """.parseJson[Map[String, Int]]
// Map(a -> 5, b -> 123)
Maps are limited in the sense that the values have to be of same type.
If you need them different, consider using case classes or dynamic JSON values.