add asJSON function