Combinators for bidirectional JSON parsing