use json.NewEncoder instead of json.Marshall