He began his apprenticeship with Captain Peter Hastings-Bass at Kingsclere. On that trainer's death in 1964, he transferred to Ian Balding. His first win came on Balding's Abel at York on 18 May 1965 and his first big win came on Salvo in the 1966 Vaux Gold Tankard for Harry Wragg. In 1967, he won the Ebor on Ovaltine and the Cesarewitch on Boismoss, and ended the season as Champion Apprentice with 39 victories.
In 1968, he moved to Middleham, North Yorkshire where he rode for Sam Hall, although he still rode for many leading southern stables. That year he won 68 races, including a second Ebor on Alignment, the Free Handicap at Newmarket on Panpiper and the Portland Handicap on Gold Pollen.
1969 brought Johnson his biggest career victory - a "faultless ride" in the Epsom Derby on Blakeney - and his biggest seasonal haul to that date of 79. In 1972, he became stable jockey to Barry Hills, for whom he almost won a second Derby on Rheingold, when he finished beaten by a short head by Lester Piggott on Roberto. Although Roberto was a very good horse, Johnson himself believes that the combination of the Epsom track and the fact that Piggott was at the peak of his powers got him beat. By September 1974, he had completed the feat of at least one winner at each racecourse in Britain.
Shortly after Royal Ascot 1977, Johnson sustained shoulder injuries and a broken leg in an incident at Newmarket when his mount Courjet swerved, ran off the course and threw him against a post. This caused him to miss the rest of the season. He bounced back the following season with his best ever end of season total of 86 and a second classic win on the Hills-trained Enstone Spark in the 1,000 Guineas.
His arrangement with Hills ended with the arrival of American jockey Steve Cauthen at the stable in 1979. Though he still rode some horses for the yard, Cauthen was very much the first choice jockey and by 1982 Johnson was riding more or less as a freelance.He had a spell riding for Clive Brittain during 1980-81 and also a number of winners for Michael Stoute. His seasonal totals of winners dropped away dramatically, - 61 in 1979, 49 in 1980, 29 in 1981, 46 in 1982, to 27 in 1983.
In the 1980 Epsom Oaks, Johnson rode The Dancer, on whom he had won a race at Newbury as a 2 year old, for Major Dick Hern. Hern's stable jockey, Willie Carson, also had the choice of Cheshire Oaks winner Shoot A Line and Musidora Stakes winner Bireme. He elected to ride Bireme, who won by 2 lengths from Vielle, with The Dancer in 3rd. Johnson made much of the running until two furlongs out and was possibly a shade unlucky - The Dancer was partially sighted in one eye and had to race along the inside rails, eventually getting herself boxed in. In 1982 he had what would be his final ride in the Epsom Derby, finishing last of the 18 runners on the rank outsider Florida Son.
By the mid-1980s, riding opportunities were becoming scarce, so he relocated to Ireland for a short while in 1984, to ride for Eddie O'Grady. When this failed to work out, he returned to England for a season, riding just 11 winners in 1985. This was followed by some time spent riding in Singapore. He also rode winners in Kenya, India and Hong Kong during his career. Back in England in the early 1990s, although he was one of only eight then active jockeys to have passed the 1,000 winner mark, rides were even harder to come by, and he picked up just eleven winners in four years, riding only 40 in his final 13 seasons as a jockey. The last time he rode double figures in a season was 10 in 1988, while his last big race winner was the Martin Pipe-trained Tamarpour in the 1991 Northumberland Plate at Newcastle. Despite the lack of rides, Johnson did not feel bitter, saying in 1993, 'I'm just doing what I enjoy and happy going from day to day. At least I've won a Derby.' He rode his last winner on Desert Sand at Ayr in September 1998 and his last race (besides one-off 'legends' races) in 2002.