Johnston made his first-class debut for Hampshire in the 1902 County Championship against Surrey. Johnston played 107 matches for Hampshire before the First World War, with Johnston's most successful seasons with the bat coming in 1910 when he scored 1,158 runs at a batting average of 36.18, with seven half centuries and a single century score of 130; and in 1,044 runs at an average of 54.94 and a career high score of 175 against Warwickshire. In addition to representing Hampshire before the war, Johnston also played for the Marylebone Cricket Club in two pre-war first-class matches against Nottinghamshire and Leicestershire, both matches coming in 1911. Also in 1911, Johnston played a single match for the Gentlemen in the 1911 Gentlemen v Players fixture, representing them once more in the 1912 fixture. In 1914, the season which was cut short due to the First World War, Johnston played a single match for the Army against the Royal Navy. Johnston's final first-class match for Hampshire before the war came against Surrey at Portsmouth.
Johnston returned from the First World War with a permanent limp, though he continued his activities as a soldier and sportsman. In 1919 Johnston played his final match for Hampshire against Gloucestershire. In his first-class career for Hampshire, Johnston scored 5,442 runs at an average of 30.74, with 27 half centuries, 10 centuries and a high score of 175. Johnston was also a part-time leg break bowler, taking 18 wickets at a bowling average of 44.72, with best figures of 4/21. In the field Johnston took 57 catches and made a single stumping. In 1920 Johnston played his second and final first-class match for the Marylebone Cricket Club against the Army and the same season he played his final first-class match for the Gentlemen of England against the Combined Services. In his combined first-class career Johnston played 116 matches, scoring 5,966 runs at an average of 30.91, with 31 half centuries, 10 centuries and a high score of 175. All of Johnston's first-class wickets came while he was playing for Hampshire. Johnston continued to play cricket, although in a non first-class capacity, playing the Netherlands on tours to the county with the Free Foresters and the Marylebone Cricket Club. In 1929/30 Johnston toured Egypt with HM Martineau's XI, where he played matches against the Egypt national cricket team. Johnston's playing career came to an end with the Free Foresters tour of the Netherlands in 1933. As well as playing cricket, Johnston played for the Army at Association football and hockey and played polo for Western Nigeria. Johnston died at Knaphill, Surrey on 27 December 1952.