Blob Blame History Raw
<!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/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.8"/>
<title>json-c: json_visit.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">json-c
   &#160;<span id="projectnumber">0.13.1</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.8 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">json_visit.h File Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Methods for walking a tree of objects.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ac5be4a96b99b724833943003715dfc1c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="json__visit_8h.html#ac5be4a96b99b724833943003715dfc1c">JSON_C_VISIT_SECOND</a>&#160;&#160;&#160;0x02</td></tr>
<tr class="separator:ac5be4a96b99b724833943003715dfc1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a98b35e1ba1d52d41799dccbfd2c170a1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="json__visit_8h.html#a98b35e1ba1d52d41799dccbfd2c170a1">JSON_C_VISIT_RETURN_CONTINUE</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:a98b35e1ba1d52d41799dccbfd2c170a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc7ca60a79c4ae870d9463e41527c2a1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="json__visit_8h.html#adc7ca60a79c4ae870d9463e41527c2a1">JSON_C_VISIT_RETURN_SKIP</a>&#160;&#160;&#160;7547</td></tr>
<tr class="separator:adc7ca60a79c4ae870d9463e41527c2a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a327a21f1f1c6f84e7a13fbaaf4a51b13"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="json__visit_8h.html#a327a21f1f1c6f84e7a13fbaaf4a51b13">JSON_C_VISIT_RETURN_POP</a>&#160;&#160;&#160;767</td></tr>
<tr class="separator:a327a21f1f1c6f84e7a13fbaaf4a51b13"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5956f41bed48f90a127f9b37fad7ea97"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="json__visit_8h.html#a5956f41bed48f90a127f9b37fad7ea97">JSON_C_VISIT_RETURN_STOP</a>&#160;&#160;&#160;7867</td></tr>
<tr class="separator:a5956f41bed48f90a127f9b37fad7ea97"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abfacb0713b81c897a8ce5f37ff6ffb9c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="json__visit_8h.html#abfacb0713b81c897a8ce5f37ff6ffb9c">JSON_C_VISIT_RETURN_ERROR</a>&#160;&#160;&#160;-1</td></tr>
<tr class="separator:abfacb0713b81c897a8ce5f37ff6ffb9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a0fadec4abb2befcacfaff7df822f3f8d"><td class="memItemLeft" align="right" valign="top">typedef int(&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="json__visit_8h.html#a0fadec4abb2befcacfaff7df822f3f8d">json_c_visit_userfunc</a> )(<a class="el" href="structjson__object.html">json_object</a> *jso, int flags, <a class="el" href="structjson__object.html">json_object</a> *parent_jso, const char *jso_key, size_t *jso_index, void *userarg)</td></tr>
<tr class="separator:a0fadec4abb2befcacfaff7df822f3f8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ac13d0e2e7bf34cd1be6eee3f0f112045"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="json__visit_8h.html#ac13d0e2e7bf34cd1be6eee3f0f112045">json_c_visit</a> (<a class="el" href="structjson__object.html">json_object</a> *jso, int future_flags, <a class="el" href="json__visit_8h.html#a0fadec4abb2befcacfaff7df822f3f8d">json_c_visit_userfunc</a> *userfunc, void *userarg)</td></tr>
<tr class="separator:ac13d0e2e7bf34cd1be6eee3f0f112045"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Methods for walking a tree of objects. </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="a98b35e1ba1d52d41799dccbfd2c170a1"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define JSON_C_VISIT_RETURN_CONTINUE&#160;&#160;&#160;0</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>This json_c_visit_userfunc return value indicates that iteration should proceed normally. </p>

</div>
</div>
<a class="anchor" id="abfacb0713b81c897a8ce5f37ff6ffb9c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define JSON_C_VISIT_RETURN_ERROR&#160;&#160;&#160;-1</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>This json_c_visit_userfunc return value indicates that iteration should stop immediately, and cause json_c_visit to return an error. </p>

</div>
</div>
<a class="anchor" id="a327a21f1f1c6f84e7a13fbaaf4a51b13"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define JSON_C_VISIT_RETURN_POP&#160;&#160;&#160;767</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>This json_c_visit_userfunc return value indicates that iteration of the fields/elements of the <b>containing</b> object should stop and continue "popped up" a level of the object hierarchy. For example, returning this when handling arg will result in arg3 and any other fields being skipped. The next call to userfunc will be the JSON_C_VISIT_SECOND call on "foo", followed by a userfunc call on "bar". </p><pre>
{
  "foo": {
    "arg1": 1,
    "arg2": 2,
    "arg3": 3,
    ...
  },
  "bar": {
    ...
  }
}
</pre> 
</div>
</div>
<a class="anchor" id="adc7ca60a79c4ae870d9463e41527c2a1"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define JSON_C_VISIT_RETURN_SKIP&#160;&#160;&#160;7547</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>This json_c_visit_userfunc return value indicates that iteration over the members of the current object should be skipped. If the current object isn't a container (array or object), this is no different than JSON_C_VISIT_RETURN_CONTINUE. </p>

</div>
</div>
<a class="anchor" id="a5956f41bed48f90a127f9b37fad7ea97"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define JSON_C_VISIT_RETURN_STOP&#160;&#160;&#160;7867</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>This json_c_visit_userfunc return value indicates that iteration should stop immediately, and cause json_c_visit to return success. </p>

</div>
</div>
<a class="anchor" id="ac5be4a96b99b724833943003715dfc1c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define JSON_C_VISIT_SECOND&#160;&#160;&#160;0x02</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Passed to json_c_visit_userfunc as one of the flags values to indicate that this is the second time a container (array or object) is being called, after all of it's members have been iterated over. </p>

</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="a0fadec4abb2befcacfaff7df822f3f8d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef int( json_c_visit_userfunc)(<a class="el" href="structjson__object.html">json_object</a> *jso, int flags, <a class="el" href="structjson__object.html">json_object</a> *parent_jso, const char *jso_key, size_t *jso_index, void *userarg)</td>
        </tr>
      </table>
</div><div class="memdoc">

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ac13d0e2e7bf34cd1be6eee3f0f112045"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int json_c_visit </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structjson__object.html">json_object</a> *&#160;</td>
          <td class="paramname"><em>jso</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>future_flags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="json__visit_8h.html#a0fadec4abb2befcacfaff7df822f3f8d">json_c_visit_userfunc</a> *&#160;</td>
          <td class="paramname"><em>userfunc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>userarg</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Visit each object in the JSON hierarchy starting at jso. For each object, userfunc is called, passing the object and userarg. If the object has a parent (i.e. anything other than jso itself) its parent will be passed as parent_jso, and either jso_key or jso_index will be set, depending on whether the parent is an object or an array.</p>
<p>Nodes will be visited depth first, but containers (arrays and objects) will be visited twice, the second time with JSON_C_VISIT_SECOND set in flags.</p>
<p>userfunc must return one of the defined return values, to indicate whether and how to continue visiting nodes, or one of various ways to stop.</p>
<p>Returns 0 if nodes were visited successfully, even if some were intentionally skipped due to what userfunc returned. Returns &lt;0 if an error occurred during iteration, including if userfunc returned JSON_C_VISIT_RETURN_ERROR. </p>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Mon Mar 5 2018 23:17:09 for json-c by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.8
</small></address>
</body>
</html>