Interactive dictionary with inexact lookups (step 1)
The biggest thing that jumps out at me is that your project isn't in the form of a class, it's a function. This is, while not quite discouraged, certainly non-advantageous. Classes make things more portable. If I were building this, I'd structure it something like this:

class fuzzydict:
  """Fuzztdict: A dictionary with inexact lookups
       #Function definitions, etc go here.
  """
  def __init__(self):
    #Create the data file, initialize all your other variables.
  def __str__(self):
    #This one isn't necessary, but it would allow you to customize what would happen when you call print on a fuzzydict.
  def find_word(self,word):
    #Find a word in the dictionary, or report that it (probably) doesn't exist.
  def add_word(self,word,definition):
    #Add a word to the dictionary. 


Then, you'd instantiate it with newDict = fuzzydict() and you'd be good to go. You can use stuff like newDict.find_word('apple'), which is a much more intuitive interface than your while loop.

A few other things about your code:


You're checking various versions of your data in the JSON. Do you intend to eventually be able to input data yourself? Then I'd suggest formatting your entries into all UPPER or all lower case, then including how they were originally inputted as an attribute for that entry. This'll eliminate the multiple checks. 
Error handling. The difference between a good program and a truly epic program is how gracefully it can recover from something it didn't expect. 
As stated in other answers, document. Document, document, document. Even when it's just a particularly interesting way of doing something, make your code as descriptive as possible. Future you will thank you, as well as anybody else who tries to decipher the finished project. Remember docstrings, they're a gift from whatever deities the creators of Python worship.