<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>18.2. json — JSON encoder and decoder — Python v2.6.6 documentation</title>
<link rel="stylesheet" href="../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '2.6.6',
COLLAPSE_MODINDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="Search within Python v2.6.6 documentation"
href="../_static/opensearch.xml"/>
<link rel="author" title="About these documents" href="../about.html" />
<link rel="copyright" title="Copyright" href="../copyright.html" />
<link rel="top" title="Python v2.6.6 documentation" href="../index.html" />
<link rel="up" title="18. Internet Data Handling" href="netdata.html" />
<link rel="next" title="18.3. mailcap — Mailcap file handling" href="mailcap.html" />
<link rel="prev" title="18.1.11. email: Examples" href="email-examples.html" />
<link rel="shortcut icon" type="image/png" href="../_static/py.png" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../modindex.html" title="Global Module Index"
accesskey="M">modules</a> |</li>
<li class="right" >
<a href="mailcap.html" title="18.3. mailcap — Mailcap file handling"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="email-examples.html" title="18.1.11. email: Examples"
accesskey="P">previous</a> |</li>
<li><img src="../_static/py.png" alt=""
style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="../index.html">Python v2.6.6 documentation</a> »</li>
<li><a href="index.html" >The Python Standard Library</a> »</li>
<li><a href="netdata.html" accesskey="U">18. Internet Data Handling</a> »</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="module-json">
<h1>18.2. <tt class="xref docutils literal"><span class="pre">json</span></tt> — JSON encoder and decoder<a class="headerlink" href="#module-json" title="Permalink to this headline">¶</a></h1>
<p class="versionadded">
<span class="versionmodified">New in version 2.6.</span></p>
<p>JSON (JavaScript Object Notation) <<a class="reference external" href="http://json.org">http://json.org</a>> is a subset of JavaScript
syntax (ECMA-262 3rd edition) used as a lightweight data interchange format.</p>
<p><tt class="xref docutils literal"><span class="pre">json</span></tt> exposes an API familiar to users of the standard library
<a title="Convert Python objects to streams of bytes and back (with different constraints)." class="reference external" href="marshal.html#module-marshal"><tt class="xref docutils literal"><span class="pre">marshal</span></tt></a> and <a title="Convert Python objects to streams of bytes and back." class="reference external" href="pickle.html#module-pickle"><tt class="xref docutils literal"><span class="pre">pickle</span></tt></a> modules.</p>
<p>Encoding basic Python object hierarchies:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">json</span>
<span class="gp">>>> </span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">([</span><span class="s">'foo'</span><span class="p">,</span> <span class="p">{</span><span class="s">'bar'</span><span class="p">:</span> <span class="p">(</span><span class="s">'baz'</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mi">2</span><span class="p">)}])</span>
<span class="go">'["foo", {"bar": ["baz", null, 1.0, 2]}]'</span>
<span class="gp">>>> </span><span class="k">print</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="s">"</span><span class="se">\"</span><span class="s">foo</span><span class="se">\b</span><span class="s">ar"</span><span class="p">)</span>
<span class="go">"\"foo\bar"</span>
<span class="gp">>>> </span><span class="k">print</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="s">u'</span><span class="se">\u1234</span><span class="s">'</span><span class="p">)</span>
<span class="go">"\u1234"</span>
<span class="gp">>>> </span><span class="k">print</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="s">'</span><span class="se">\\</span><span class="s">'</span><span class="p">)</span>
<span class="go">"\\"</span>
<span class="gp">>>> </span><span class="k">print</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">({</span><span class="s">"c"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s">"b"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s">"a"</span><span class="p">:</span> <span class="mi">0</span><span class="p">},</span> <span class="n">sort_keys</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
<span class="go">{"a": 0, "b": 0, "c": 0}</span>
<span class="gp">>>> </span><span class="kn">from</span> <span class="nn">StringIO</span> <span class="kn">import</span> <span class="n">StringIO</span>
<span class="gp">>>> </span><span class="n">io</span> <span class="o">=</span> <span class="n">StringIO</span><span class="p">()</span>
<span class="gp">>>> </span><span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">([</span><span class="s">'streaming API'</span><span class="p">],</span> <span class="n">io</span><span class="p">)</span>
<span class="gp">>>> </span><span class="n">io</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
<span class="go">'["streaming API"]'</span>
</pre></div>
</div>
<p>Compact encoding:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">json</span>
<span class="gp">>>> </span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,{</span><span class="s">'4'</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span> <span class="s">'6'</span><span class="p">:</span> <span class="mi">7</span><span class="p">}],</span> <span class="n">separators</span><span class="o">=</span><span class="p">(</span><span class="s">','</span><span class="p">,</span><span class="s">':'</span><span class="p">))</span>
<span class="go">'[1,2,3,{"4":5,"6":7}]'</span>
</pre></div>
</div>
<p>Pretty printing:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">json</span>
<span class="gp">>>> </span><span class="k">print</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">({</span><span class="s">'4'</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span> <span class="s">'6'</span><span class="p">:</span> <span class="mi">7</span><span class="p">},</span> <span class="n">sort_keys</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="go">{</span>
<span class="go"> "4": 5,</span>
<span class="go"> "6": 7</span>
<span class="go">}</span>
</pre></div>
</div>
<p>Decoding JSON:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">json</span>
<span class="gp">>>> </span><span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="s">'["foo", {"bar":["baz", null, 1.0, 2]}]'</span><span class="p">)</span>
<span class="go">[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]</span>
<span class="gp">>>> </span><span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="s">'"</span><span class="se">\\</span><span class="s">"foo</span><span class="se">\\</span><span class="s">bar"'</span><span class="p">)</span>
<span class="go">u'"foo\x08ar'</span>
<span class="gp">>>> </span><span class="kn">from</span> <span class="nn">StringIO</span> <span class="kn">import</span> <span class="n">StringIO</span>
<span class="gp">>>> </span><span class="n">io</span> <span class="o">=</span> <span class="n">StringIO</span><span class="p">(</span><span class="s">'["streaming API"]'</span><span class="p">)</span>
<span class="gp">>>> </span><span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">io</span><span class="p">)</span>
<span class="go">[u'streaming API']</span>
</pre></div>
</div>
<p>Specializing JSON object decoding:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">json</span>
<span class="gp">>>> </span><span class="k">def</span> <span class="nf">as_complex</span><span class="p">(</span><span class="n">dct</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">if</span> <span class="s">'__complex__'</span> <span class="ow">in</span> <span class="n">dct</span><span class="p">:</span>
<span class="gp">... </span> <span class="k">return</span> <span class="nb">complex</span><span class="p">(</span><span class="n">dct</span><span class="p">[</span><span class="s">'real'</span><span class="p">],</span> <span class="n">dct</span><span class="p">[</span><span class="s">'imag'</span><span class="p">])</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">dct</span>
<span class="gp">...</span>
<span class="gp">>>> </span><span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="s">'{"__complex__": true, "real": 1, "imag": 2}'</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">object_hook</span><span class="o">=</span><span class="n">as_complex</span><span class="p">)</span>
<span class="go">(1+2j)</span>
<span class="gp">>>> </span><span class="kn">import</span> <span class="nn">decimal</span>
<span class="gp">>>> </span><span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="s">'1.1'</span><span class="p">,</span> <span class="n">parse_float</span><span class="o">=</span><span class="n">decimal</span><span class="o">.</span><span class="n">Decimal</span><span class="p">)</span>
<span class="go">Decimal('1.1')</span>
</pre></div>
</div>
<p>Extending <a title="json.JSONEncoder" class="reference internal" href="#json.JSONEncoder"><tt class="xref docutils literal"><span class="pre">JSONEncoder</span></tt></a>:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">json</span>
<span class="gp">>>> </span><span class="k">class</span> <span class="nc">ComplexEncoder</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">JSONEncoder</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="nb">complex</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="p">[</span><span class="n">obj</span><span class="o">.</span><span class="n">real</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">imag</span><span class="p">]</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">JSONEncoder</span><span class="o">.</span><span class="n">default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">)</span>
<span class="gp">...</span>
<span class="gp">>>> </span><span class="n">dumps</span><span class="p">(</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="n">j</span><span class="p">,</span> <span class="n">cls</span><span class="o">=</span><span class="n">ComplexEncoder</span><span class="p">)</span>
<span class="go">'[2.0, 1.0]'</span>
<span class="gp">>>> </span><span class="n">ComplexEncoder</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="n">j</span><span class="p">)</span>
<span class="go">'[2.0, 1.0]'</span>
<span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="n">ComplexEncoder</span><span class="p">()</span><span class="o">.</span><span class="n">iterencode</span><span class="p">(</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="n">j</span><span class="p">))</span>
<span class="go">['[', '2.0', ', ', '1.0', ']']</span>
</pre></div>
</div>
<p>Using json.tool from the shell to validate and pretty-print:</p>
<div class="highlight-none"><div class="highlight"><pre>$ echo '{"json":"obj"}' | python -mjson.tool
{
"json": "obj"
}
$ echo '{ 1.2:3.4}' | python -mjson.tool
Expecting property name: line 1 column 2 (char 2)
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">The JSON produced by this module’s default settings is a subset of
YAML, so it may be used as a serializer for that as well.</p>
</div>
<div class="section" id="basic-usage">
<h2>18.2.1. Basic Usage<a class="headerlink" href="#basic-usage" title="Permalink to this headline">¶</a></h2>
<dl class="function">
<dt id="json.dump">
<tt class="descclassname">json.</tt><tt class="descname">dump</tt><big>(</big><em>obj</em>, <em>fp</em><span class="optional">[</span>, <em>skipkeys</em><span class="optional">[</span>, <em>ensure_ascii</em><span class="optional">[</span>, <em>check_circular</em><span class="optional">[</span>, <em>allow_nan</em><span class="optional">[</span>, <em>cls</em><span class="optional">[</span>, <em>indent</em><span class="optional">[</span>, <em>separators</em><span class="optional">[</span>, <em>encoding</em><span class="optional">[</span>, <em>default</em><span class="optional">[</span>, <em>**kw</em><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><big>)</big><a class="headerlink" href="#json.dump" title="Permalink to this definition">¶</a></dt>
<dd><p>Serialize <em>obj</em> as a JSON formatted stream to <em>fp</em> (a <tt class="docutils literal"><span class="pre">.write()</span></tt>-supporting
file-like object).</p>
<p>If <em>skipkeys</em> is <tt class="xref docutils literal"><span class="pre">True</span></tt> (default: <tt class="xref docutils literal"><span class="pre">False</span></tt>), then dict keys that are not
of a basic type (<a title="str" class="reference external" href="functions.html#str"><tt class="xref docutils literal"><span class="pre">str</span></tt></a>, <a title="unicode" class="reference external" href="functions.html#unicode"><tt class="xref docutils literal"><span class="pre">unicode</span></tt></a>, <a title="int" class="reference external" href="functions.html#int"><tt class="xref docutils literal"><span class="pre">int</span></tt></a>, <a title="long" class="reference external" href="functions.html#long"><tt class="xref docutils literal"><span class="pre">long</span></tt></a>,
<a title="float" class="reference external" href="functions.html#float"><tt class="xref docutils literal"><span class="pre">float</span></tt></a>, <a title="bool" class="reference external" href="functions.html#bool"><tt class="xref docutils literal"><span class="pre">bool</span></tt></a>, <tt class="xref docutils literal"><span class="pre">None</span></tt>) will be skipped instead of raising a
<a title="exceptions.TypeError" class="reference external" href="exceptions.html#exceptions.TypeError"><tt class="xref docutils literal"><span class="pre">TypeError</span></tt></a>.</p>
<p>If <em>ensure_ascii</em> is <tt class="xref docutils literal"><span class="pre">False</span></tt> (default: <tt class="xref docutils literal"><span class="pre">True</span></tt>), then some chunks written
to <em>fp</em> may be <a title="unicode" class="reference external" href="functions.html#unicode"><tt class="xref docutils literal"><span class="pre">unicode</span></tt></a> instances, subject to normal Python
<a title="str" class="reference external" href="functions.html#str"><tt class="xref docutils literal"><span class="pre">str</span></tt></a> to <a title="unicode" class="reference external" href="functions.html#unicode"><tt class="xref docutils literal"><span class="pre">unicode</span></tt></a> coercion rules. Unless <tt class="docutils literal"><span class="pre">fp.write()</span></tt>
explicitly understands <a title="unicode" class="reference external" href="functions.html#unicode"><tt class="xref docutils literal"><span class="pre">unicode</span></tt></a> (as in <a title="codecs.getwriter" class="reference external" href="codecs.html#codecs.getwriter"><tt class="xref docutils literal"><span class="pre">codecs.getwriter()</span></tt></a>) this
is likely to cause an error.</p>
<p>If <em>check_circular</em> is <tt class="xref docutils literal"><span class="pre">False</span></tt> (default: <tt class="xref docutils literal"><span class="pre">True</span></tt>), then the circular
reference check for container types will be skipped and a circular reference
will result in an <a title="exceptions.OverflowError" class="reference external" href="exceptions.html#exceptions.OverflowError"><tt class="xref docutils literal"><span class="pre">OverflowError</span></tt></a> (or worse).</p>
<p>If <em>allow_nan</em> is <tt class="xref docutils literal"><span class="pre">False</span></tt> (default: <tt class="xref docutils literal"><span class="pre">True</span></tt>), then it will be a
<a title="exceptions.ValueError" class="reference external" href="exceptions.html#exceptions.ValueError"><tt class="xref docutils literal"><span class="pre">ValueError</span></tt></a> to serialize out of range <a title="float" class="reference external" href="functions.html#float"><tt class="xref docutils literal"><span class="pre">float</span></tt></a> values (<tt class="docutils literal"><span class="pre">nan</span></tt>,
<tt class="docutils literal"><span class="pre">inf</span></tt>, <tt class="docutils literal"><span class="pre">-inf</span></tt>) in strict compliance of the JSON specification, instead of
using the JavaScript equivalents (<tt class="docutils literal"><span class="pre">NaN</span></tt>, <tt class="docutils literal"><span class="pre">Infinity</span></tt>, <tt class="docutils literal"><span class="pre">-Infinity</span></tt>).</p>
<p>If <em>indent</em> is a non-negative integer, then JSON array elements and object
members will be pretty-printed with that indent level. An indent level of 0
will only insert newlines. <tt class="xref docutils literal"><span class="pre">None</span></tt> (the default) selects the most compact
representation.</p>
<p>If <em>separators</em> is an <tt class="docutils literal"><span class="pre">(item_separator,</span> <span class="pre">dict_separator)</span></tt> tuple, then it
will be used instead of the default <tt class="docutils literal"><span class="pre">(',</span> <span class="pre">',</span> <span class="pre">':</span> <span class="pre">')</span></tt> separators. <tt class="docutils literal"><span class="pre">(',',</span>
<span class="pre">':')</span></tt> is the most compact JSON representation.</p>
<p><em>encoding</em> is the character encoding for str instances, default is UTF-8.</p>
<p><em>default(obj)</em> is a function that should return a serializable version of
<em>obj</em> or raise <a title="exceptions.TypeError" class="reference external" href="exceptions.html#exceptions.TypeError"><tt class="xref docutils literal"><span class="pre">TypeError</span></tt></a>. The default simply raises <a title="exceptions.TypeError" class="reference external" href="exceptions.html#exceptions.TypeError"><tt class="xref docutils literal"><span class="pre">TypeError</span></tt></a>.</p>
<p>To use a custom <a title="json.JSONEncoder" class="reference internal" href="#json.JSONEncoder"><tt class="xref docutils literal"><span class="pre">JSONEncoder</span></tt></a> subclass (e.g. one that overrides the
<tt class="xref docutils literal"><span class="pre">default()</span></tt> method to serialize additional types), specify it with the
<em>cls</em> kwarg.</p>
</dd></dl>
<dl class="function">
<dt id="json.dumps">
<tt class="descclassname">json.</tt><tt class="descname">dumps</tt><big>(</big><em>obj</em><span class="optional">[</span>, <em>skipkeys</em><span class="optional">[</span>, <em>ensure_ascii</em><span class="optional">[</span>, <em>check_circular</em><span class="optional">[</span>, <em>allow_nan</em><span class="optional">[</span>, <em>cls</em><span class="optional">[</span>, <em>indent</em><span class="optional">[</span>, <em>separators</em><span class="optional">[</span>, <em>encoding</em><span class="optional">[</span>, <em>default</em><span class="optional">[</span>, <em>**kw</em><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><big>)</big><a class="headerlink" href="#json.dumps" title="Permalink to this definition">¶</a></dt>
<dd><p>Serialize <em>obj</em> to a JSON formatted <a title="str" class="reference external" href="functions.html#str"><tt class="xref docutils literal"><span class="pre">str</span></tt></a>.</p>
<p>If <em>ensure_ascii</em> is <tt class="xref docutils literal"><span class="pre">False</span></tt>, then the return value will be a
<a title="unicode" class="reference external" href="functions.html#unicode"><tt class="xref docutils literal"><span class="pre">unicode</span></tt></a> instance. The other arguments have the same meaning as in
<a title="json.dump" class="reference internal" href="#json.dump"><tt class="xref docutils literal"><span class="pre">dump()</span></tt></a>.</p>
</dd></dl>
<dl class="function">
<dt id="json.load">
<tt class="descclassname">json.</tt><tt class="descname">load</tt><big>(</big><em>fp</em><span class="optional">[</span>, <em>encoding</em><span class="optional">[</span>, <em>cls</em><span class="optional">[</span>, <em>object_hook</em><span class="optional">[</span>, <em>parse_float</em><span class="optional">[</span>, <em>parse_int</em><span class="optional">[</span>, <em>parse_constant</em><span class="optional">[</span>, <em>**kw</em><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><big>)</big><a class="headerlink" href="#json.load" title="Permalink to this definition">¶</a></dt>
<dd><p>Deserialize <em>fp</em> (a <tt class="docutils literal"><span class="pre">.read()</span></tt>-supporting file-like object containing a JSON
document) to a Python object.</p>
<p>If the contents of <em>fp</em> are encoded with an ASCII based encoding other than
UTF-8 (e.g. latin-1), then an appropriate <em>encoding</em> name must be specified.
Encodings that are not ASCII based (such as UCS-2) are not allowed, and
should be wrapped with <tt class="docutils literal"><span class="pre">codecs.getreader(encoding)(fp)</span></tt>, or simply decoded
to a <a title="unicode" class="reference external" href="functions.html#unicode"><tt class="xref docutils literal"><span class="pre">unicode</span></tt></a> object and passed to <a title="json.loads" class="reference internal" href="#json.loads"><tt class="xref docutils literal"><span class="pre">loads()</span></tt></a>.</p>
<p><em>object_hook</em> is an optional function that will be called with the result of
any object literal decoded (a <a title="dict" class="reference external" href="stdtypes.html#dict"><tt class="xref docutils literal"><span class="pre">dict</span></tt></a>). The return value of
<em>object_hook</em> will be used instead of the <a title="dict" class="reference external" href="stdtypes.html#dict"><tt class="xref docutils literal"><span class="pre">dict</span></tt></a>. This feature can be used
to implement custom decoders (e.g. JSON-RPC class hinting).</p>
<p><em>parse_float</em>, if specified, will be called with the string of every JSON
float to be decoded. By default, this is equivalent to <tt class="docutils literal"><span class="pre">float(num_str)</span></tt>.
This can be used to use another datatype or parser for JSON floats
(e.g. <a title="decimal.Decimal" class="reference external" href="decimal.html#decimal.Decimal"><tt class="xref docutils literal"><span class="pre">decimal.Decimal</span></tt></a>).</p>
<p><em>parse_int</em>, if specified, will be called with the string of every JSON int
to be decoded. By default, this is equivalent to <tt class="docutils literal"><span class="pre">int(num_str)</span></tt>. This can
be used to use another datatype or parser for JSON integers
(e.g. <a title="float" class="reference external" href="functions.html#float"><tt class="xref docutils literal"><span class="pre">float</span></tt></a>).</p>
<p><em>parse_constant</em>, if specified, will be called with one of the following
strings: <tt class="docutils literal"><span class="pre">'-Infinity'</span></tt>, <tt class="docutils literal"><span class="pre">'Infinity'</span></tt>, <tt class="docutils literal"><span class="pre">'NaN'</span></tt>, <tt class="docutils literal"><span class="pre">'null'</span></tt>, <tt class="docutils literal"><span class="pre">'true'</span></tt>,
<tt class="docutils literal"><span class="pre">'false'</span></tt>. This can be used to raise an exception if invalid JSON numbers
are encountered.</p>
<p>To use a custom <a title="json.JSONDecoder" class="reference internal" href="#json.JSONDecoder"><tt class="xref docutils literal"><span class="pre">JSONDecoder</span></tt></a> subclass, specify it with the <tt class="docutils literal"><span class="pre">cls</span></tt>
kwarg. Additional keyword arguments will be passed to the constructor of the
class.</p>
</dd></dl>
<dl class="function">
<dt id="json.loads">
<tt class="descclassname">json.</tt><tt class="descname">loads</tt><big>(</big><em>s</em><span class="optional">[</span>, <em>encoding</em><span class="optional">[</span>, <em>cls</em><span class="optional">[</span>, <em>object_hook</em><span class="optional">[</span>, <em>parse_float</em><span class="optional">[</span>, <em>parse_int</em><span class="optional">[</span>, <em>parse_constant</em><span class="optional">[</span>, <em>**kw</em><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><big>)</big><a class="headerlink" href="#json.loads" title="Permalink to this definition">¶</a></dt>
<dd><p>Deserialize <em>s</em> (a <a title="str" class="reference external" href="functions.html#str"><tt class="xref docutils literal"><span class="pre">str</span></tt></a> or <a title="unicode" class="reference external" href="functions.html#unicode"><tt class="xref docutils literal"><span class="pre">unicode</span></tt></a> instance containing a JSON
document) to a Python object.</p>
<p>If <em>s</em> is a <a title="str" class="reference external" href="functions.html#str"><tt class="xref docutils literal"><span class="pre">str</span></tt></a> instance and is encoded with an ASCII based encoding
other than UTF-8 (e.g. latin-1), then an appropriate <em>encoding</em> name must be
specified. Encodings that are not ASCII based (such as UCS-2) are not
allowed and should be decoded to <a title="unicode" class="reference external" href="functions.html#unicode"><tt class="xref docutils literal"><span class="pre">unicode</span></tt></a> first.</p>
<p>The other arguments have the same meaning as in <a title="json.dump" class="reference internal" href="#json.dump"><tt class="xref docutils literal"><span class="pre">dump()</span></tt></a>.</p>
</dd></dl>
</div>
<div class="section" id="encoders-and-decoders">
<h2>18.2.2. Encoders and decoders<a class="headerlink" href="#encoders-and-decoders" title="Permalink to this headline">¶</a></h2>
<dl class="class">
<dt id="json.JSONDecoder">
<em class="property">class </em><tt class="descclassname">json.</tt><tt class="descname">JSONDecoder</tt><big>(</big><span class="optional">[</span><em>encoding</em><span class="optional">[</span>, <em>object_hook</em><span class="optional">[</span>, <em>parse_float</em><span class="optional">[</span>, <em>parse_int</em><span class="optional">[</span>, <em>parse_constant</em><span class="optional">[</span>, <em>strict</em><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><big>)</big><a class="headerlink" href="#json.JSONDecoder" title="Permalink to this definition">¶</a></dt>
<dd><p>Simple JSON decoder.</p>
<p>Performs the following translations in decoding by default:</p>
<table border="1" class="docutils">
<colgroup>
<col width="44%" />
<col width="56%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">JSON</th>
<th class="head">Python</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>object</td>
<td>dict</td>
</tr>
<tr><td>array</td>
<td>list</td>
</tr>
<tr><td>string</td>
<td>unicode</td>
</tr>
<tr><td>number (int)</td>
<td>int, long</td>
</tr>
<tr><td>number (real)</td>
<td>float</td>
</tr>
<tr><td>true</td>
<td>True</td>
</tr>
<tr><td>false</td>
<td>False</td>
</tr>
<tr><td>null</td>
<td>None</td>
</tr>
</tbody>
</table>
<p>It also understands <tt class="docutils literal"><span class="pre">NaN</span></tt>, <tt class="docutils literal"><span class="pre">Infinity</span></tt>, and <tt class="docutils literal"><span class="pre">-Infinity</span></tt> as their
corresponding <tt class="docutils literal"><span class="pre">float</span></tt> values, which is outside the JSON spec.</p>
<p><em>encoding</em> determines the encoding used to interpret any <a title="str" class="reference external" href="functions.html#str"><tt class="xref docutils literal"><span class="pre">str</span></tt></a> objects
decoded by this instance (UTF-8 by default). It has no effect when decoding
<a title="unicode" class="reference external" href="functions.html#unicode"><tt class="xref docutils literal"><span class="pre">unicode</span></tt></a> objects.</p>
<p>Note that currently only encodings that are a superset of ASCII work, strings
of other encodings should be passed in as <a title="unicode" class="reference external" href="functions.html#unicode"><tt class="xref docutils literal"><span class="pre">unicode</span></tt></a>.</p>
<p><em>object_hook</em>, if specified, will be called with the result of every JSON
object decoded and its return value will be used in place of the given
<a title="dict" class="reference external" href="stdtypes.html#dict"><tt class="xref docutils literal"><span class="pre">dict</span></tt></a>. This can be used to provide custom deserializations (e.g. to
support JSON-RPC class hinting).</p>
<p><em>parse_float</em>, if specified, will be called with the string of every JSON
float to be decoded. By default, this is equivalent to <tt class="docutils literal"><span class="pre">float(num_str)</span></tt>.
This can be used to use another datatype or parser for JSON floats
(e.g. <a title="decimal.Decimal" class="reference external" href="decimal.html#decimal.Decimal"><tt class="xref docutils literal"><span class="pre">decimal.Decimal</span></tt></a>).</p>
<p><em>parse_int</em>, if specified, will be called with the string of every JSON int
to be decoded. By default, this is equivalent to <tt class="docutils literal"><span class="pre">int(num_str)</span></tt>. This can
be used to use another datatype or parser for JSON integers
(e.g. <a title="float" class="reference external" href="functions.html#float"><tt class="xref docutils literal"><span class="pre">float</span></tt></a>).</p>
<p><em>parse_constant</em>, if specified, will be called with one of the following
strings: <tt class="docutils literal"><span class="pre">'-Infinity'</span></tt>, <tt class="docutils literal"><span class="pre">'Infinity'</span></tt>, <tt class="docutils literal"><span class="pre">'NaN'</span></tt>, <tt class="docutils literal"><span class="pre">'null'</span></tt>, <tt class="docutils literal"><span class="pre">'true'</span></tt>,
<tt class="docutils literal"><span class="pre">'false'</span></tt>. This can be used to raise an exception if invalid JSON numbers
are encountered.</p>
<dl class="method">
<dt id="json.JSONDecoder.decode">
<tt class="descname">decode</tt><big>(</big><em>s</em><big>)</big><a class="headerlink" href="#json.JSONDecoder.decode" title="Permalink to this definition">¶</a></dt>
<dd>Return the Python representation of <em>s</em> (a <a title="str" class="reference external" href="functions.html#str"><tt class="xref docutils literal"><span class="pre">str</span></tt></a> or
<a title="unicode" class="reference external" href="functions.html#unicode"><tt class="xref docutils literal"><span class="pre">unicode</span></tt></a> instance containing a JSON document)</dd></dl>
<dl class="method">
<dt id="json.JSONDecoder.raw_decode">
<tt class="descname">raw_decode</tt><big>(</big><em>s</em><big>)</big><a class="headerlink" href="#json.JSONDecoder.raw_decode" title="Permalink to this definition">¶</a></dt>
<dd><p>Decode a JSON document from <em>s</em> (a <a title="str" class="reference external" href="functions.html#str"><tt class="xref docutils literal"><span class="pre">str</span></tt></a> or <a title="unicode" class="reference external" href="functions.html#unicode"><tt class="xref docutils literal"><span class="pre">unicode</span></tt></a>
beginning with a JSON document) and return a 2-tuple of the Python
representation and the index in <em>s</em> where the document ended.</p>
<p>This can be used to decode a JSON document from a string that may have
extraneous data at the end.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="json.JSONEncoder">
<em class="property">class </em><tt class="descclassname">json.</tt><tt class="descname">JSONEncoder</tt><big>(</big><span class="optional">[</span><em>skipkeys</em><span class="optional">[</span>, <em>ensure_ascii</em><span class="optional">[</span>, <em>check_circular</em><span class="optional">[</span>, <em>allow_nan</em><span class="optional">[</span>, <em>sort_keys</em><span class="optional">[</span>, <em>indent</em><span class="optional">[</span>, <em>separators</em><span class="optional">[</span>, <em>encoding</em><span class="optional">[</span>, <em>default</em><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><big>)</big><a class="headerlink" href="#json.JSONEncoder" title="Permalink to this definition">¶</a></dt>
<dd><p>Extensible JSON encoder for Python data structures.</p>
<p>Supports the following objects and types by default:</p>
<table border="1" class="docutils">
<colgroup>
<col width="56%" />
<col width="44%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Python</th>
<th class="head">JSON</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>dict</td>
<td>object</td>
</tr>
<tr><td>list, tuple</td>
<td>array</td>
</tr>
<tr><td>str, unicode</td>
<td>string</td>
</tr>
<tr><td>int, long, float</td>
<td>number</td>
</tr>
<tr><td>True</td>
<td>true</td>
</tr>
<tr><td>False</td>
<td>false</td>
</tr>
<tr><td>None</td>
<td>null</td>
</tr>
</tbody>
</table>
<p>To extend this to recognize other objects, subclass and implement a
<a title="json.JSONEncoder.default" class="reference internal" href="#json.JSONEncoder.default"><tt class="xref docutils literal"><span class="pre">default()</span></tt></a> method with another method that returns a serializable object
for <tt class="docutils literal"><span class="pre">o</span></tt> if possible, otherwise it should call the superclass implementation
(to raise <a title="exceptions.TypeError" class="reference external" href="exceptions.html#exceptions.TypeError"><tt class="xref docutils literal"><span class="pre">TypeError</span></tt></a>).</p>
<p>If <em>skipkeys</em> is <tt class="xref docutils literal"><span class="pre">False</span></tt> (the default), then it is a <a title="exceptions.TypeError" class="reference external" href="exceptions.html#exceptions.TypeError"><tt class="xref docutils literal"><span class="pre">TypeError</span></tt></a> to
attempt encoding of keys that are not str, int, long, float or None. If
<em>skipkeys</em> is <tt class="xref docutils literal"><span class="pre">True</span></tt>, such items are simply skipped.</p>
<p>If <em>ensure_ascii</em> is <tt class="xref docutils literal"><span class="pre">True</span></tt> (the default), the output is guaranteed to be
<a title="str" class="reference external" href="functions.html#str"><tt class="xref docutils literal"><span class="pre">str</span></tt></a> objects with all incoming unicode characters escaped. If
<em>ensure_ascii</em> is <tt class="xref docutils literal"><span class="pre">False</span></tt>, the output will be a unicode object.</p>
<p>If <em>check_circular</em> is <tt class="xref docutils literal"><span class="pre">True</span></tt> (the default), then lists, dicts, and custom
encoded objects will be checked for circular references during encoding to
prevent an infinite recursion (which would cause an <a title="exceptions.OverflowError" class="reference external" href="exceptions.html#exceptions.OverflowError"><tt class="xref docutils literal"><span class="pre">OverflowError</span></tt></a>).
Otherwise, no such check takes place.</p>
<p>If <em>allow_nan</em> is <tt class="xref docutils literal"><span class="pre">True</span></tt> (the default), then <tt class="docutils literal"><span class="pre">NaN</span></tt>, <tt class="docutils literal"><span class="pre">Infinity</span></tt>, and
<tt class="docutils literal"><span class="pre">-Infinity</span></tt> will be encoded as such. This behavior is not JSON
specification compliant, but is consistent with most JavaScript based
encoders and decoders. Otherwise, it will be a <a title="exceptions.ValueError" class="reference external" href="exceptions.html#exceptions.ValueError"><tt class="xref docutils literal"><span class="pre">ValueError</span></tt></a> to encode
such floats.</p>
<p>If <em>sort_keys</em> is <tt class="xref docutils literal"><span class="pre">True</span></tt> (the default), then the output of dictionaries
will be sorted by key; this is useful for regression tests to ensure that
JSON serializations can be compared on a day-to-day basis.</p>
<p>If <em>indent</em> is a non-negative integer (it is <tt class="xref docutils literal"><span class="pre">None</span></tt> by default), then JSON
array elements and object members will be pretty-printed with that indent
level. An indent level of 0 will only insert newlines. <tt class="xref docutils literal"><span class="pre">None</span></tt> is the most
compact representation.</p>
<p>If specified, <em>separators</em> should be an <tt class="docutils literal"><span class="pre">(item_separator,</span> <span class="pre">key_separator)</span></tt>
tuple. The default is <tt class="docutils literal"><span class="pre">(',</span> <span class="pre">',</span> <span class="pre">':</span> <span class="pre">')</span></tt>. To get the most compact JSON
representation, you should specify <tt class="docutils literal"><span class="pre">(',',</span> <span class="pre">':')</span></tt> to eliminate whitespace.</p>
<p>If specified, <em>default</em> is a function that gets called for objects that can’t
otherwise be serialized. It should return a JSON encodable version of the
object or raise a <a title="exceptions.TypeError" class="reference external" href="exceptions.html#exceptions.TypeError"><tt class="xref docutils literal"><span class="pre">TypeError</span></tt></a>.</p>
<p>If <em>encoding</em> is not <tt class="xref docutils literal"><span class="pre">None</span></tt>, then all input strings will be transformed
into unicode using that encoding prior to JSON-encoding. The default is
UTF-8.</p>
<dl class="method">
<dt id="json.JSONEncoder.default">
<tt class="descname">default</tt><big>(</big><em>o</em><big>)</big><a class="headerlink" href="#json.JSONEncoder.default" title="Permalink to this definition">¶</a></dt>
<dd><p>Implement this method in a subclass such that it returns a serializable
object for <em>o</em>, or calls the base implementation (to raise a
<a title="exceptions.TypeError" class="reference external" href="exceptions.html#exceptions.TypeError"><tt class="xref docutils literal"><span class="pre">TypeError</span></tt></a>).</p>
<p>For example, to support arbitrary iterators, you could implement default
like this:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">o</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">iterable</span> <span class="o">=</span> <span class="nb">iter</span><span class="p">(</span><span class="n">o</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">iterable</span><span class="p">)</span>
<span class="k">return</span> <span class="n">JSONEncoder</span><span class="o">.</span><span class="n">default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">o</span><span class="p">)</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="json.JSONEncoder.encode">
<tt class="descname">encode</tt><big>(</big><em>o</em><big>)</big><a class="headerlink" href="#json.JSONEncoder.encode" title="Permalink to this definition">¶</a></dt>
<dd><p>Return a JSON string representation of a Python data structure, <em>o</em>. For
example:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">JSONEncoder</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">({</span><span class="s">"foo"</span><span class="p">:</span> <span class="p">[</span><span class="s">"bar"</span><span class="p">,</span> <span class="s">"baz"</span><span class="p">]})</span>
<span class="go">'{"foo": ["bar", "baz"]}'</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="json.JSONEncoder.iterencode">
<tt class="descname">iterencode</tt><big>(</big><em>o</em><big>)</big><a class="headerlink" href="#json.JSONEncoder.iterencode" title="Permalink to this definition">¶</a></dt>
<dd><p>Encode the given object, <em>o</em>, and yield each string representation as
available. For example:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="k">for</span> <span class="n">chunk</span> <span class="ow">in</span> <span class="n">JSONEncoder</span><span class="p">()</span><span class="o">.</span><span class="n">iterencode</span><span class="p">(</span><span class="n">bigobject</span><span class="p">):</span>
<span class="n">mysocket</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span>
</pre></div>
</div>
</dd></dl>
</dd></dl>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<h3><a href="../contents.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="#">18.2. <tt class="docutils literal"><span class="pre">json</span></tt> — JSON encoder and decoder</a><ul>
<li><a class="reference external" href="#basic-usage">18.2.1. Basic Usage</a></li>
<li><a class="reference external" href="#encoders-and-decoders">18.2.2. Encoders and decoders</a></li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="email-examples.html"
title="previous chapter">18.1.11. <tt class="docutils literal docutils literal docutils literal"><span class="pre">email</span></tt>: Examples</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="mailcap.html"
title="next chapter">18.3. <tt class="docutils literal"><span class="pre">mailcap</span></tt> — Mailcap file handling</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">Report a Bug</a></li>
<li><a href="../_sources/library/json.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../modindex.html" title="Global Module Index"
>modules</a> |</li>
<li class="right" >
<a href="mailcap.html" title="18.3. mailcap — Mailcap file handling"
>next</a> |</li>
<li class="right" >
<a href="email-examples.html" title="18.1.11. email: Examples"
>previous</a> |</li>
<li><img src="../_static/py.png" alt=""
style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="../index.html">Python v2.6.6 documentation</a> »</li>
<li><a href="index.html" >The Python Standard Library</a> »</li>
<li><a href="netdata.html" >18. Internet Data Handling</a> »</li>
</ul>
</div>
<div class="footer">
© <a href="../copyright.html">Copyright</a> 1990-2011, Python Software Foundation.
<br />
The Python Software Foundation is a non-profit corporation.
<a href="http://www.python.org/psf/donations/">Please donate.</a>
<br />
Last updated on Jul 20, 2011.
<a href="../bugs.html">Found a bug</a>?
<br />
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.6.
</div>
</body>
</html>
Copyright 2K16 - 2K18 Indonesian Hacker Rulez