add unit test, add to_json/from_json function