Recursive JSON deserialization