Extract Nested Data From Complex JSON

Never manually walk through complex JSON objects again by using this function

<span class="hljs-comment"># recursivejson.py</span>

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">extract_values</span><span class="hljs-params">(obj, key)</span>:</span>
    <span class="hljs-string">"""Pull all values of specified key from nested JSON."""</span>
    arr = []

    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">extract</span><span class="hljs-params">(obj, arr, key)</span>:</span>
        <span class="hljs-string">"""Recursively search for values of key in JSON tree."""</span>
        <span class="hljs-keyword">if</span> isinstance(obj, dict):
            <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> obj.items():
                <span class="hljs-keyword">if</span> isinstance(v, (dict, list)):
                    extract(v, arr, key)
                <span class="hljs-keyword">elif</span> k == key:
                    arr.append(v)
        <span class="hljs-keyword">elif</span> isinstance(obj, list):
            <span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> obj:
                extract(item, arr, key)
        <span class="hljs-keyword">return</span> arr

    results = extract(obj, arr, key)
    <span class="hljs-keyword">return</span> results