John is an exceptionally good liar. He has a strong sense of empathy, something which makes it easy for him to see how people feel and to get into their heads without them noticing, and he is able to make people believe he is exactly what they want him to be. This is a very useful skill for a doctor, who needs people to trust him and believe what he says. John used to think people believed what he said because he always believed it so strongly himself, or at least believed it would be to the other person’s benefit to believe it
After he met Sherlock, he has discovered that it takes him no effort at all to lie convincingly about anything, anything at all, so long as it’s to do with a case or with keeping Sherlock safe (the two are becoming increasingly hard to differentiate between). He hasn’t tried lying solely for his own benefit yet; he’s not entirely sure he wants to know how well he’d be able to do it.