title: object_hook does not address the full json
body: <p>I have trouble understanding the way the object_hook function parses the json it is supplied by json.loads. </p>
  
  <p>Consider the following:</p>
  
  <pre><code>import json
  
  j = '{"key": "Program1",\
      "value": {"codes": [], "name": "John Doe", "cities": ["New York", "Houston"]}}'
  
  class Humans:
      def __init__(self, source, codes, name, cities):
          self.source = source
          self.codes = codes
          self.name = name
          self.cities = cities
  
  def as_Humans(dct):
      print(dct)
      source = dct['key']
      value = dct['value']
      codes = value['codes']
      name = value['name']
      cities = value['cities']
      return(Humans(source, codes, name, cities))
  
  
  print(json.loads(j))
  human = json.loads(j, object_hook = as_Humans)        
  print(human.name)
  </code></pre>
  
  <p>When I run this I get the following errors:</p>
  
  <pre><code>{'key': 'Program1', 'value': {'name': 'John Doe', 'cities': ['New York', 'Houston'], 'codes': []}}
  {'name': 'John Doe', 'cities': ['New York', 'Houston'], 'codes': []}
  Traceback (most recent call last):
    File "stackoverflow.py", line 25, in &lt;module&gt;
      human = json.loads(j, object_hook = as_Humans)        
    File "/usr/lib/python3.4/json/__init__.py", line 331, in loads
      return cls(**kw).decode(s)
    File "/usr/lib/python3.4/json/decoder.py", line 343, in decode
      obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    File "/usr/lib/python3.4/json/decoder.py", line 359, in raw_decode
      obj, end = self.scan_once(s, idx)
    File "stackoverflow.py", line 16, in as_Humans
      source = dct['key']
  KeyError: 'key'
  </code></pre>
  
  <p>Clearly this does not work the way I think it does: from the <code>print(dct)</code> in the hook, I can see that only a subset of the original json got passed, and since that part does not have the key "key", well, I get a key error. </p>
  
  <p>If I modify this in order to only have <code>{"codes": [], "name": "John Doe", "cities": ["New York", "Houston"]}</code> in the json (and modify everything else accordingly), it works.</p>
  
  <p>Interestingly enough, if the json is <code>'{"value": {"codes": [], "name": "John Doe", "cities": ["New York", "Houston"]}}'</code>, it fails in the same way (key error on "value").</p>
  
  <p>What am I missing? Is my JSON string invalid? Is it possible to do this without tweaking the json first?</p>