Media playback is not supported on this device
The 22-year-old Scot finished in three minutes 34.17 seconds - his previous best was 3:35.49.
"In utter shock. Cannot believe I've just won a Diamond League," he tweeted.
In a bizarre women's 200m, Dutch world champion Dafne Schippers was reinstated as winner having initially been disqualified after finishing first.
The 24-year-old crossed the line in 22.33 after she was allowed to race despite appearing to make a false start. Schippers suggested crowd noise was the reason for her error.
Moments later, Ivory Coast sprinter Muriel Ahoure was announced as the winner with Schippers disqualified. However, following an appeal, the Rio 2016 silver medallist was reinstated.
In the 1500m, Wightman finished ahead of Kenya's 2015 world silver medallist Elijah Manangoi (3:34:30) and European silver medallist Marcin Lewandowski of Poland (3:34.60).
Home favourite and current European champion Filip Ingebrigsten was fourth, and Briton Charlie Grice, who reached the Rio 2016 final, was sixth.
Find out how to get into athletics with our inclusive guide.
And in the men's 100m Briton Chijindu Ujah equalled his season's best in the 100m, but was pipped to victory by Canada's Andre De Grasse.
Ujah came home in 10.02 seconds - the same time he posted at the Rome meeting last week - just 0.01 behind De Grasse. Another Briton, Adam Gemili, was fourth in 10.13.
Highlights of the Oslo meeting will be shown on Saturday at 13:20 BST on BBC One.
Briton Jake Wightman knocked over a second off his personal best as he beat a high-quality field to win the 1500m at the Oslo Diamond League meeting.