--- /dev/null
+<!DOCTYPE html><html><head><title>Ext.data.reader.Json | Ext JS 4.0 Documentation</title><script type="text/javascript" src="../ext-all.js"></script><link rel="stylesheet" href="../reset.css" type="text/css"><link rel="stylesheet" href="../scrollbars.css" type="text/css"><link rel="stylesheet" href="../docs.css" type="text/css"><link id="styleCss" rel="stylesheet" href="../style.css" type="text/css"><script type="text/javascript" src="../prettify.js"></script><link rel="stylesheet" href="../prettify.css" type="text/css"><!-- link(rel: 'stylesheet', href: req.baseURL + '/css/ext4.css', type: 'text/css')--><link rel="shortcut icon" type="image/ico" href="../favicon.ico"><!--[if IE]>
+<style type="text/css">.head-band { display: none; }
+.header { border: 0; top: 0; left: 0px; background: url(../header.gif) repeat-x; }
+.doc-tab .members .member a.more { background-color: #efefef; }
+</style><link rel="stylesheet" href="/new/css/ie.css" type="text/css"><![endif]-->
+</head><body id="ext-body" class="iScroll"><div id="notice" class="notice">For up to date documentation and features, visit
+<a href="http://docs.sencha.com/ext-js/4-0">http://docs.sencha.com/ext-js/4-0</a></div><div class="wrapper"><div class="head-band"></div><div class="header"><h2><a href="../index.html">Sencha Documentation</a></h2></div><div id="search"><form><input type="text" placeholder="Search" id="search-field" autocomplete="off" name="q"></form><div id="search-box"></div></div><div id="treePanel"></div><div id="container"><script type="text/javascript">
+
+ req = {
+ liveURL: '.',
+ standAloneMode: true,
+ origDocClass: 'Ext.data.reader.Json',
+ docClass: 'Ext.data.reader.Json',
+ docReq: 'Ext.data.reader.Json',
+ version: '4.0',
+ baseURL: '.',
+ baseDocURL: '.',
+ baseProdURL: '.'
+ };
+
+ clsInfo = {};
+
+
+
+</script>
+
+<script type="text/javascript" src="../search.js"></script>
+<!--script type="text/javascript" src="/new/javascripts/app/examples.js"></script-->
+<script type="text/javascript" src="../class_tree.js"></script>
+<script type="text/javascript" src="../class_doc.js"></script>
+<script type="text/javascript">
+ req.source = 'Json.html#Ext-data.reader.Json';
+ clsInfo = {"methods":["Json","getResponseData","read","readRecords"],"cfgs":["idProperty","implicitIncludes","messageProperty","record","root","successProperty","totalProperty","useSimpleAccessors"],"properties":["jsonData","rawData"],"events":[],"subclasses":["Ext.data.reader.Array"]};
+ Ext.onReady(function() {
+ Ext.create('Docs.classPanel');
+ });
+</script><div id="top-block" class="top-block"><h1 id="clsTitle" class="cls"><a href="../source/Json.html#Ext-data.reader.Json" target="_blank">Ext.data.reader.Json</a></h1></div><div id="docContent"><div id="doc-overview-content"><div class="lft"><pre class="subclasses"><h4>Hierarchy</h4><div class="subclass f"><a href="Ext.data.reader.Reader.html" rel="Ext.data.reader.Reader" class="cls docClass">Ext.data.reader.Reader</a><div class="subclass"><strong>Ext.data.reader.Json</strong></div></div></pre><p>The JSON Reader is used by a Proxy to read a server response that is sent back in JSON format. This usually
+happens as a result of loading a Store - for example we might create something like this:</p>
+
+
+
+
+<pre class="prettyprint"><code>Ext.define('User', {
+ extend: 'Ext.data.Model',
+ fields: ['id', 'name', 'email']
+});
+
+var store = new Ext.data.Store({
+ model: 'User',
+ proxy: {
+ type: 'ajax',
+ url : 'users.json',
+ reader: {
+ type: 'json'
+ }
+ }
+});
+</code></pre>
+
+
+
+
+<p>The example above creates a 'User' model. Models are explained in the <a href="Ext.data.Model.html" rel="Ext.data.Model" class="docClass">Model</a> docs if you're
+not already familiar with them.</p>
+
+
+
+
+<p>We created the simplest type of JSON Reader possible by simply telling our <a href="Ext.data.Store.html" rel="Ext.data.Store" class="docClass">Store</a>'s
+<a href="Ext.data.proxy.Proxy.html" rel="Ext.data.proxy.Proxy" class="docClass">Proxy</a> that we want a JSON Reader. The Store automatically passes the configured model to the
+Store, so it is as if we passed this instead:
+
+<pre class="prettyprint"><code>reader: {
+ type : 'json',
+ model: 'User'
+}
+</code></pre>
+
+<p>The reader we set up is ready to read data from our server - at the moment it will accept a response like this:</p>
+
+<pre class="prettyprint"><code>[
+ {
+ "id": 1,
+ "name": "Ed Spencer",
+ "email": "ed@sencha.com"
+ },
+ {
+ "id": 2,
+ "name": "Abe Elias",
+ "email": "abe@sencha.com"
+ }
+]
+</code></pre>
+
+<p><u>Reading other JSON formats</u></p>
+
+<p>If you already have your JSON format defined and it doesn't look quite like what we have above, you can usually
+pass JsonReader a couple of configuration options to make it parse your format. For example, we can use the
+<a href="Ext.data.reader.Json.html#root" rel="Ext.data.reader.Json#root" class="docClass">root</a> configuration to parse data that comes back like this:</p>
+
+<pre class="prettyprint"><code>{
+ "users": [
+ {
+ "id": 1,
+ "name": "Ed Spencer",
+ "email": "ed@sencha.com"
+ },
+ {
+ "id": 2,
+ "name": "Abe Elias",
+ "email": "abe@sencha.com"
+ }
+ ]
+}
+</code></pre>
+
+<p>To parse this we just pass in a <a href="Ext.data.reader.Json.html#root" rel="Ext.data.reader.Json#root" class="docClass">root</a> configuration that matches the 'users' above:</p>
+
+<pre class="prettyprint"><code>reader: {
+ type: 'json',
+ root: 'users'
+}
+</code></pre>
+
+<p>Sometimes the JSON structure is even more complicated. Document databases like CouchDB often provide metadata
+around each record inside a nested structure like this:</p>
+
+<pre class="prettyprint"><code>{
+ "total": 122,
+ "offset": 0,
+ "users": [
+ {
+ "id": "ed-spencer-1",
+ "value": 1,
+ "user": {
+ "id": 1,
+ "name": "Ed Spencer",
+ "email": "ed@sencha.com"
+ }
+ }
+ ]
+}
+</code></pre>
+
+<p>In the case above the record data is nested an additional level inside the "users" array as each "user" item has
+additional metadata surrounding it ('id' and 'value' in this case). To parse data out of each "user" item in the
+JSON above we need to specify the <a href="Ext.data.reader.Json.html#record" rel="Ext.data.reader.Json#record" class="docClass">record</a> configuration like this:</p>
+
+<pre class="prettyprint"><code>reader: {
+ type : 'json',
+ root : 'users',
+ record: 'user'
+}
+</code></pre>
+
+<p><u>Response metadata</u></p>
+
+<p>The server can return additional data in its response, such as the <a href="Ext.data.reader.Json.html#totalProperty" rel="Ext.data.reader.Json#totalProperty" class="docClass">total number of records</a>
+and the <a href="Ext.data.reader.Json.html#successProperty" rel="Ext.data.reader.Json#successProperty" class="docClass">success status of the response</a>. These are typically included in the JSON response
+like this:</p>
+
+<pre class="prettyprint"><code>{
+ "total": 100,
+ "success": true,
+ "users": [
+ {
+ "id": 1,
+ "name": "Ed Spencer",
+ "email": "ed@sencha.com"
+ }
+ ]
+}
+</code></pre>
+
+<p>If these properties are present in the JSON response they can be parsed out by the JsonReader and used by the
+Store that loaded it. We can set up the names of these properties by specifying a final pair of configuration
+options:</p>
+
+<pre class="prettyprint"><code>reader: {
+ type : 'json',
+ root : 'users',
+ totalProperty : 'total',
+ successProperty: 'success'
+}
+</code></pre>
+
+<p>These final options are not necessary to make the Reader work, but can be useful when the server needs to report
+an error or if it needs to indicate that there is a lot of data available of which only a subset is currently being
+returned.</p>
+
+<div class="members"><div class="m-cfgs"><div class="definedBy">Defined By</div><a name="configs"></a><h3 class="cfg p">Config Options</h3><h4 class="cfgGroup">Other Configs</h4><div id="config-idProperty" class="member f inherited"><a href="Ext.data.reader.Json.html#config-idProperty" rel="config-idProperty" class="expand more ar"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-cfg-idProperty" class="viewSource">view source</a></div><a name="idProperty"></a><a name="config-idProperty"></a><a href="Ext.data.reader.Json.html#" rel="config-idProperty" class="cls expand">idProperty</a><span> : String</span></div><div class="description"><div class="short">Name of the property within a row object
+that contains a record identifier value. Defaults to The id of the model.
+I...</div><div class="long"><p>Name of the property within a row object
+that contains a record identifier value. Defaults to <tt>The id of the model</tt>.
+If an idProperty is explicitly specified it will override that of the one specified
+on the model</p>
+</div></div></div><div id="config-implicitIncludes" class="member inherited"><a href="Ext.data.reader.Json.html#config-implicitIncludes" rel="config-implicitIncludes" class="expand more ar"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-cfg-implicitIncludes" class="viewSource">view source</a></div><a name="implicitIncludes"></a><a name="config-implicitIncludes"></a><a href="Ext.data.reader.Json.html#" rel="config-implicitIncludes" class="cls expand">implicitIncludes</a><span> : Boolean</span></div><div class="description"><div class="short">True to automatically parse models nested within other models in a response
+object. See the Ext.data.reader.Reader in...</div><div class="long"><p>True to automatically parse models nested within other models in a response
+object. See the <a href="Ext.data.reader.Reader.html" rel="Ext.data.reader.Reader" class="docClass">Ext.data.reader.Reader</a> intro docs for full explanation. Defaults to true.</p>
+</div></div></div><div id="config-messageProperty" class="member inherited"><a href="Ext.data.reader.Json.html#config-messageProperty" rel="config-messageProperty" class="expand more"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-cfg-messageProperty" class="viewSource">view source</a></div><a name="messageProperty"></a><a name="config-messageProperty"></a><a href="Ext.data.reader.Json.html#" rel="config-messageProperty" class="cls expand">messageProperty</a><span> : String</span></div><div class="description"><div class="short"><p>The name of the property which contains a response message.
+This property is optional.</p>
+</div><div class="long"><p>The name of the property which contains a response message.
+This property is optional.</p>
+</div></div></div><div id="config-record" class="member ni"><a href="Ext.data.reader.Json.html#config-record" rel="config-record" class="expand more ar"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Json.html" class="definedIn docClass">Ext.data.reader.Json</a><br/><a href="../source/Json.html#Ext-data.reader.Json-cfg-record" class="viewSource">view source</a></div><a name="record"></a><a name="config-record"></a><a href="Ext.data.reader.Json.html#" rel="config-record" class="cls expand">record</a><span> : String</span></div><div class="description"><div class="short">The optional location within the JSON response that the record data itself can be found at.
+See the JsonReader intro ...</div><div class="long"><p>The optional location within the JSON response that the record data itself can be found at.
+See the JsonReader intro docs for more details. This is not often needed and defaults to undefined.</p>
+</div></div></div><div id="config-root" class="member inherited"><a href="Ext.data.reader.Json.html#config-root" rel="config-root" class="expand more ar"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-cfg-root" class="viewSource">view source</a></div><a name="root"></a><a name="config-root"></a><a href="Ext.data.reader.Json.html#" rel="config-root" class="cls expand">root</a><span> : String</span></div><div class="description"><div class="short">Required. The name of the property
+which contains the Array of row objects. Defaults to undefined.
+An exception wil...</div><div class="long"><p><b>Required</b>. The name of the property
+which contains the Array of row objects. Defaults to <tt>undefined</tt>.
+An exception will be thrown if the root property is undefined. The data
+packet value for this property should be an empty array to clear the data
+or show no data.</p>
+</div></div></div><div id="config-successProperty" class="member inherited"><a href="Ext.data.reader.Json.html#config-successProperty" rel="config-successProperty" class="expand more ar"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-cfg-successProperty" class="viewSource">view source</a></div><a name="successProperty"></a><a name="config-successProperty"></a><a href="Ext.data.reader.Json.html#" rel="config-successProperty" class="cls expand">successProperty</a><span> : String</span></div><div class="description"><div class="short">Name of the property from which to
+retrieve the success attribute. Defaults to success. See
+Ext.data.proxy.Proxy.exc...</div><div class="long"><p>Name of the property from which to
+retrieve the success attribute. Defaults to <tt>success</tt>. See
+<a href="Ext.data.proxy.Proxy.html" rel="Ext.data.proxy.Proxy" class="docClass">Ext.data.proxy.Proxy</a>.<a href="Ext.data.proxy.Proxy.html#exception" rel="Ext.data.proxy.Proxy#exception" class="docClass">exception</a>
+for additional information.</p>
+</div></div></div><div id="config-totalProperty" class="member inherited"><a href="Ext.data.reader.Json.html#config-totalProperty" rel="config-totalProperty" class="expand more ar"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-cfg-totalProperty" class="viewSource">view source</a></div><a name="totalProperty"></a><a name="config-totalProperty"></a><a href="Ext.data.reader.Json.html#" rel="config-totalProperty" class="cls expand">totalProperty</a><span> : String</span></div><div class="description"><div class="short">Name of the property from which to
+retrieve the total number of records in the dataset. This is only needed
+if the wh...</div><div class="long"><p>Name of the property from which to
+retrieve the total number of records in the dataset. This is only needed
+if the whole dataset is not passed in one go, but is being paged from
+the remote server. Defaults to <tt>total</tt>.</p>
+</div></div></div><div id="config-useSimpleAccessors" class="member ni"><a href="Ext.data.reader.Json.html#config-useSimpleAccessors" rel="config-useSimpleAccessors" class="expand more ar"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Json.html" class="definedIn docClass">Ext.data.reader.Json</a><br/><a href="../source/Json.html#Ext-data.reader.Json-cfg-useSimpleAccessors" class="viewSource">view source</a></div><a name="useSimpleAccessors"></a><a name="config-useSimpleAccessors"></a><a href="Ext.data.reader.Json.html#" rel="config-useSimpleAccessors" class="cls expand">useSimpleAccessors</a><span> : Boolean</span></div><div class="description"><div class="short">True to ensure that field names/mappings are treated as literals when
+reading values. Defalts to false.
+For example, ...</div><div class="long"><p>True to ensure that field names/mappings are treated as literals when
+reading values. Defalts to <tt>false</tt>.
+For example, by default, using the mapping "foo.bar.baz" will try and read a property foo from the root, then a property bar
+from foo, then a property baz from bar. Setting the simple accessors to true will read the property with the name
+"foo.bar.baz" direct from the root object.</p>
+</div></div></div></div><div class="m-properties"><a name="properties"></a><div class="definedBy">Defined By</div><h3 class="prp p">Properties</h3><div id="property-jsonData" class="member f ni"><a href="Ext.data.reader.Json.html#property-jsonData" rel="property-jsonData" class="expand more"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Json.html" class="definedIn docClass">Ext.data.reader.Json</a><br/><a href="../source/Json.html#Ext-data.reader.Json-property-jsonData" class="viewSource">view source</a></div><a name="jsonData"></a><a name="property-jsonData"></a><a href="Ext.data.reader.Json.html#" rel="property-jsonData" class="cls expand">jsonData</a><span> : Mixed</span></div><div class="description"><div class="short"><p>DEPRECATED - will be removed in <a href="Ext.html" rel="Ext" class="docClass">Ext</a> JS 5.0. This is just a copy of this.rawData - use that instead</p>
+</div><div class="long"><p>DEPRECATED - will be removed in <a href="Ext.html" rel="Ext" class="docClass">Ext</a> JS 5.0. This is just a copy of this.rawData - use that instead</p>
+</div></div></div><div id="property-rawData" class="member inherited"><a href="Ext.data.reader.Json.html#property-rawData" rel="property-rawData" class="expand more"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-property-rawData" class="viewSource">view source</a></div><a name="rawData"></a><a name="property-rawData"></a><a href="Ext.data.reader.Json.html#" rel="property-rawData" class="cls expand">rawData</a><span> : Mixed</span></div><div class="description"><div class="short"><p>The raw data object that was last passed to readRecords. Stored for further processing if needed</p>
+</div><div class="long"><p>The raw data object that was last passed to readRecords. Stored for further processing if needed</p>
+</div></div></div></div><div class="m-methods"><a name="methods"></a><div class="definedBy">Defined By</div><h3 class="mth p">Methods</h3><div id="method-Json" class="member f inherited"><a href="Ext.data.reader.Json.html#method-Json" rel="method-Json" class="expand more ar"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-method-constructor" class="viewSource">view source</a></div><a name="Json"></a><a name="method-Json"></a><a href="Ext.data.reader.Json.html#" rel="method-Json" class="cls expand">Json</a>(
+<span class="pre">Object config</span>)
+ : void</div><div class="description"><div class="short"><p> </p></div><div class="long">
+<h3 class="pa">Parameters</h3><ul><li><span class="pre">config</span> : Object<div class="sub-desc"><p>Optional config object</p>
+</div></li></ul><h3 class="pa">Returns</h3><ul><li><span class="pre">void</span>
+</li></ul></div></div></div><div id="method-getResponseData" class="member inherited"><a href="Ext.data.reader.Json.html#method-getResponseData" rel="method-getResponseData" class="expand more ar"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-method-getResponseData" class="viewSource">view source</a></div><a name="getResponseData"></a><a name="method-getResponseData"></a><a href="Ext.data.reader.Json.html#" rel="method-getResponseData" class="cls expand">getResponseData</a>(
+<span class="pre">Object response</span>)
+ : Object</div><div class="description"><div class="short">Takes a raw response object (as passed to this.read) and returns the useful data segment of it. This must be implemen...</div><div class="long"><p>Takes a raw response object (as passed to this.read) and returns the useful data segment of it. This must be implemented by each subclass</p>
+<h3 class="pa">Parameters</h3><ul><li><span class="pre">response</span> : Object<div class="sub-desc"><p>The responce object</p>
+</div></li></ul><h3 class="pa">Returns</h3><ul><li><span class="pre">Object</span> <p>The useful data from the response</p>
+</li></ul></div></div></div><div id="method-read" class="member inherited"><a href="Ext.data.reader.Json.html#method-read" rel="method-read" class="expand more ar"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Reader.html" class="definedIn docClass">Ext.data.reader.Reader</a><br/><a href="../source/Reader.html#Ext-data.reader.Reader-method-read" class="viewSource">view source</a></div><a name="read"></a><a name="method-read"></a><a href="Ext.data.reader.Json.html#" rel="method-read" class="cls expand">read</a>(
+<span class="pre">Object response</span>)
+ : Ext.data.ResultSet</div><div class="description"><div class="short">Reads the given response object. This method normalizes the different types of response object that may be passed
+to ...</div><div class="long"><p>Reads the given response object. This method normalizes the different types of response object that may be passed
+to it, before handing off the reading of records to the <a href="Ext.data.reader.Json.html#readRecords" rel="Ext.data.reader.Json#readRecords" class="docClass">readRecords</a> function.</p>
+<h3 class="pa">Parameters</h3><ul><li><span class="pre">response</span> : Object<div class="sub-desc"><p>The response object. This may be either an XMLHttpRequest object or a plain JS object</p>
+</div></li></ul><h3 class="pa">Returns</h3><ul><li><span class="pre">Ext.data.ResultSet</span> <p>The parsed ResultSet object</p>
+</li></ul></div></div></div><div id="method-readRecords" class="member ni"><a href="Ext.data.reader.Json.html#method-readRecords" rel="method-readRecords" class="expand more ar"><span> </span></a><div class="title"><div class="meta"><a href="Ext.data.reader.Json.html" class="definedIn docClass">Ext.data.reader.Json</a><br/><a href="../source/Json.html#Ext-data.reader.Json-method-readRecords" class="viewSource">view source</a></div><a name="readRecords"></a><a name="method-readRecords"></a><a href="Ext.data.reader.Json.html#" rel="method-readRecords" class="cls expand">readRecords</a>(
+<span class="pre">Object data</span>)
+ : Ext.data.ResultSet</div><div class="description"><div class="short">Reads a JSON object and returns a ResultSet. Uses the internal getTotal and getSuccess extractors to
+retrieve meta da...</div><div class="long"><p>Reads a JSON object and returns a ResultSet. Uses the internal getTotal and getSuccess extractors to
+retrieve meta data from the response, and extractData to turn the JSON data into model instances.</p>
+<h3 class="pa">Parameters</h3><ul><li><span class="pre">data</span> : Object<div class="sub-desc"><p>The raw JSON data</p>
+</div></li></ul><h3 class="pa">Returns</h3><ul><li><span class="pre">Ext.data.ResultSet</span> <p>A ResultSet containing model instances and meta data about the results</p>
+</li></ul></div></div></div></div></div></div></div><div id="pageContent"></div></div></div></div></body></html>
\ No newline at end of file