<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: json code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 17 May 2008 16:41:46 GMT</pubDate>
    <description>DZone Snippets: json code</description>
    <item>
      <title>Output JavaScript variables from PHP</title>
      <link>http://snippets.dzone.com/posts/show/5342</link>
      <description>Class with useful static methods for outputting PHP values into JavaScript format.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//+ Jonas Raoni Soares Silva&lt;br /&gt;//@ http://jsfromhell.com&lt;br /&gt;&lt;br /&gt;class JS{&lt;br /&gt;	//generic and maybe not the desired results xD&lt;br /&gt;	function value($o){&lt;br /&gt;		if($o === null)&lt;br /&gt;			return 'null';&lt;br /&gt;		$t = strtolower(gettype($o));&lt;br /&gt;		if($t == 'string' &amp;&amp; is_numeric($o) &amp;&amp; ($o[0] || strlen($o) == 1) || in_array($t, array('double', 'integer')))&lt;br /&gt;			$t = 'number';&lt;br /&gt;		elseif($t == 'string' &amp;&amp; preg_match('@^\d{4}(?:-\d{1,2}){1,2}(?: (?:\d{1,2}:){2}\d{1,2})?$@', $o)) //strtotime works also with "strange" values strtotime('x')&lt;br /&gt;			$t = 'date';&lt;br /&gt;		elseif($t == 'array' &amp;&amp; ($c = count($k = array_keys($o))) &amp;&amp; $k !== range(0, $c - 1))&lt;br /&gt;			$t = 'object';&lt;br /&gt;		elseif(!in_array($t, array('boolean', 'string', 'array', 'object')))&lt;br /&gt;			$t = 'string';&lt;br /&gt;		$t = 'from' . $t;&lt;br /&gt;		return self::$t($o);&lt;br /&gt;	}&lt;br /&gt;	function fromNumber($o){&lt;br /&gt;		return +$o . '';&lt;br /&gt;	}&lt;br /&gt;	function fromObject($o){&lt;br /&gt;		$r = array();&lt;br /&gt;		foreach($o as $n =&gt; $v)&lt;br /&gt;			$r[] = self::fromString($n) . ':' . self::value($v);&lt;br /&gt;		return '{' . implode(',', $r) . '}';&lt;br /&gt;	}&lt;br /&gt;	function fromBoolean($o){&lt;br /&gt;		return $o ? 'true' : 'false';&lt;br /&gt;	}&lt;br /&gt;	//$q = should quote? &lt;br /&gt;	//$c = char that will be used to quote&lt;br /&gt;	function fromString($o, $q = true, $c = '"'){&lt;br /&gt;		return ($p = $q ? $c : '') . preg_replace('/\r\n|\n\r|\r/', '\n', str_replace($c, '\\' . $c, str_replace('\\', '\\\\', $o))) . $p;&lt;br /&gt;	}&lt;br /&gt;	function fromArray($o){&lt;br /&gt;		$s = '';&lt;br /&gt;		foreach($o as $v)&lt;br /&gt;			$s .= ($s ? ',' : '') . self::value($v);&lt;br /&gt;		return '[' . $s . ']';&lt;br /&gt;	}&lt;br /&gt;	function fromDate($o){&lt;br /&gt;		(is_numeric($o) &amp;&amp; $o = +$o) || ($o = strtotime($o)) &gt; 0 || ($o = mktime());&lt;br /&gt;		$o = explode(',', date('Y,n,j,G,i,s', $o));&lt;br /&gt;		foreach($o as $i =&gt; $v)&lt;br /&gt;			$o[$i] = +$v;&lt;br /&gt;		return 'new Date(' . implode(',', $o)  . ')';&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Example&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$o = new stdClass;&lt;br /&gt;$o-&gt;abc = 123;&lt;br /&gt;echo implode("\n&lt;br /&gt;", array(&lt;br /&gt;	JS::value('1984-07-22 11:30:12'),&lt;br /&gt;	JS::value('Test'),&lt;br /&gt;	JS::value(1234),&lt;br /&gt;	JS::value(true),&lt;br /&gt;	JS::value(array(1,2,3)),&lt;br /&gt;	JS::value(array('lala' =&gt; 'x')),&lt;br /&gt;	JS::value($o)&lt;br /&gt;));&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Wed, 09 Apr 2008 23:57:18 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5342</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
    <item>
      <title>Simple JSON formatting example</title>
      <link>http://snippets.dzone.com/posts/show/5273</link>
      <description>// Simple JSON formatting example&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;({&lt;br /&gt;&lt;br /&gt;	'google' : {&lt;br /&gt;	&lt;br /&gt;		'action': 'http://www.google.com.au/search',&lt;br /&gt;		&lt;br /&gt;		'method': 'POST',		&lt;br /&gt;		&lt;br /&gt;		'input': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input type="hidden" value="en" name="hl"/&gt;',&lt;br /&gt;			&lt;br /&gt;			'&lt;input value="" title="Google Search" size="55" name="q" maxlength="2048"/&gt;',&lt;br /&gt;			&lt;br /&gt;			'&lt;input type="hidden" value="en" name="hl"/&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'buttons': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input type="submit" value="Google Search" name="btnG"/&gt;',&lt;br /&gt;			&lt;br /&gt;			'&lt;input type="submit" value="I\'m Feeling Lucky" name="btnI"/&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'image': 'http://www.google.com/intl/en_ALL/images/logo.gif'&lt;br /&gt;		&lt;br /&gt;	},&lt;br /&gt;	&lt;br /&gt;	'yahoo' : {&lt;br /&gt;	&lt;br /&gt;		'action': 'http://search.yahoo.com/search',&lt;br /&gt;		&lt;br /&gt;		'method': 'POST',		&lt;br /&gt;		&lt;br /&gt;		'input': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input value="" maxlength="255" name="q" id="search" type="text"&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'buttons': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input value="Search" type="submit"&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'image': 'http://us.i1.yimg.com/us.yimg.com/i/ww/beta/y3.gif'		&lt;br /&gt;		&lt;br /&gt;	},	&lt;br /&gt;&lt;br /&gt;	'wikipedia' : {&lt;br /&gt;	&lt;br /&gt;		'action': 'http://en.wikipedia.org/wiki/Special:Search',&lt;br /&gt;		&lt;br /&gt;		'method': 'POST',&lt;br /&gt;		&lt;br /&gt;		'input': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input value="" name="search" type="text"&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'buttons': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input value="Search" name="go" type="submit"&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'image': 'http://en.wikipedia.org/images/wiki-en.png'		&lt;br /&gt;		&lt;br /&gt;	},	&lt;br /&gt;&lt;br /&gt;	'imdb' : {&lt;br /&gt;	&lt;br /&gt;		'action': 'http://imdb.com/find',&lt;br /&gt;		&lt;br /&gt;		'method': 'POST',&lt;br /&gt;		&lt;br /&gt;		'input': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input value="" name="q"&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'buttons': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input value="Search" type="submit"&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'image': 'http://i.media-imdb.com/images/nb15/logo2.gif'		&lt;br /&gt;		&lt;br /&gt;	},	&lt;br /&gt;&lt;br /&gt;	'ebay' : {&lt;br /&gt;	&lt;br /&gt;		'action': 'http://search.ebay.com.au/search/search.dll',&lt;br /&gt;		&lt;br /&gt;		'method': 'GET',&lt;br /&gt;		&lt;br /&gt;		'input': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input value="R40" name="from" type="hidden"&gt;',&lt;br /&gt;			&lt;br /&gt;			'&lt;input name="satitle" maxlength="300" type="text"&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'buttons': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input value="Search" type="submit"&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'image': 'http://pics.ebaystatic.com/aw/pics/logos/logoEbay_x45.gif'		&lt;br /&gt;		&lt;br /&gt;	},		&lt;br /&gt;	&lt;br /&gt;	'dictionary' : {&lt;br /&gt;	&lt;br /&gt;		'action': 'http://dictionary.com/search',&lt;br /&gt;		&lt;br /&gt;		'method': 'GET',&lt;br /&gt;		&lt;br /&gt;		'input': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input maxlength="256" value="" name="q" type="text"&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'buttons': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input value="Search" type="submit"&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'image': 'http://cache.lexico.com/g/d/dictionary_logo.gif'		&lt;br /&gt;		&lt;br /&gt;	},	&lt;br /&gt;&lt;br /&gt;	'iboogie' : {&lt;br /&gt;	&lt;br /&gt;		'action': 'http://www.iboogie.com/searchtree.asp',&lt;br /&gt;		&lt;br /&gt;		'method': 'GET',&lt;br /&gt;		&lt;br /&gt;		'input': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input type="text" value="test" name="name_query" /&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'buttons': [&lt;br /&gt;		&lt;br /&gt;			'&lt;input type="submit" value=" Search " class="button"/&gt;'&lt;br /&gt;		&lt;br /&gt;		],&lt;br /&gt;		&lt;br /&gt;		'image': 'http://www.iboogie.com/images/iboogie_us.jpg'		&lt;br /&gt;		&lt;br /&gt;	},		&lt;br /&gt;	&lt;br /&gt;})&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 23 Mar 2008 05:03:20 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5273</guid>
      <author>Yansky (Yansky)</author>
    </item>
    <item>
      <title>hCard to JSON bridge</title>
      <link>http://snippets.dzone.com/posts/show/4102</link>
      <description>// Requires http://pear.php.net/pepr/pepr-proposal-show.php?id=198 and http://allinthehead.com/hkit&lt;br /&gt;// Many thanks to the authors of these libraries and to the microformats community.&lt;br /&gt;// Demo: http://simplelogica.net/cajondesastre/hcard2json/index.php?url=http://11870.com/pro/19483&lt;br /&gt;// Manuel Gonz&#225;lez Noriega for Simplel&#243;gica. Hire us at http://simplelogica.net&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;    include('hkit.class.php');&lt;br /&gt;    include('JSON.class.php');&lt;br /&gt;		&lt;br /&gt;    $debug = true;&lt;br /&gt;		&lt;br /&gt;    $status = '200';&lt;br /&gt;    $ct = 'text/plain';&lt;br /&gt;		&lt;br /&gt;    $hKit = new hKit;&lt;br /&gt;    $json = new Services_JSON();&lt;br /&gt;&lt;br /&gt;    if ($_GET['url']) {&lt;br /&gt;      $result = $hKit-&gt;getByURL('hcard', $_GET['url']);&lt;br /&gt;	    &lt;br /&gt;      if ($result) {&lt;br /&gt;	$o = ($json-&gt;encode($result));&lt;br /&gt;	$ct = ($debug) ? 'text/plain' : 'application/json';			&lt;br /&gt;      }&lt;br /&gt;      else {&lt;br /&gt;	$o = '404 Not Found';&lt;br /&gt;	$status = '404';&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;      $o = '400 Bad Request';&lt;br /&gt;      $status = '400';&lt;br /&gt;    }&lt;br /&gt;	&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;  header('Content-type: '.$ct);&lt;br /&gt;  &lt;br /&gt;  switch($status) {&lt;br /&gt;    case '400':&lt;br /&gt;      header("HTTP/1.0 400 Bad Request");&lt;br /&gt;    break;&lt;br /&gt;	&lt;br /&gt;    case '404':&lt;br /&gt;      header("HTTP/1.0 404 Not Found");&lt;br /&gt;    break;&lt;br /&gt;&lt;br /&gt;    case '200':&lt;br /&gt;    default:&lt;br /&gt;      header("HTTP/1.0 200 OK");&lt;br /&gt;    break;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;print $o;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 03 Jun 2007 23:01:45 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4102</guid>
      <author>mort (Manuel Gonzalez Noriega)</author>
    </item>
    <item>
      <title>Pass JSON to Flash's ExternalInterface</title>
      <link>http://snippets.dzone.com/posts/show/4007</link>
      <description>&lt;code&gt;&lt;br /&gt;var json : String =&lt;br /&gt;	"{a: 1, b: 'hello world', c: [1, 3, 4, 5]}";&lt;br /&gt;&lt;br /&gt;var o : Object =&lt;br /&gt;	ExternalInterface.call("function(){return " + json + ";"}");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The variable o should now contain an object representation of the string json.&lt;br /&gt;Stolen from http://blog.iconara.net/2007/01/20/parsing-json-using-externalinterface/</description>
      <pubDate>Mon, 14 May 2007 07:10:25 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4007</guid>
      <author>sikelianos (Zeke Sikelianos)</author>
    </item>
    <item>
      <title>Quick and Dirty JSON Serializer</title>
      <link>http://snippets.dzone.com/posts/show/3823</link>
      <description>// quick and dirty JOSN serializer&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def jsonize(d)&lt;br /&gt;  def surround(d, i=0); '' &lt;&lt; '"[{'[i] &lt;&lt; d &lt;&lt; '"]}'[i]; end&lt;br /&gt;  alias j jsonize; alias s surround&lt;br /&gt;  if d.kind_of?(String) then s(d)&lt;br /&gt;  elsif d.kind_of?(Symbol) then s(d.to_s)&lt;br /&gt;  elsif d.kind_of?(Array) then s(d.collect {|v| j(v)}.join(', '), 1)&lt;br /&gt;  elsif d.kind_of?(Hash) then s(d.to_a.collect { |v| "#{j(v[0])} : #{j(v[1])}" }.join(', '),2)&lt;br /&gt;  # add support for other types of objects here if needed...&lt;br /&gt;  else d.to_s; end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 15 Apr 2007 13:48:52 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3823</guid>
      <author>randomdan (Dan)</author>
    </item>
    <item>
      <title>Broadcasting DZONE Shares</title>
      <link>http://snippets.dzone.com/posts/show/3803</link>
      <description>// This snippet will allow you to show your DZONE shares&lt;br /&gt;// on your web page.   Visit your shares page, click on the "feed" link&lt;br /&gt;// to get the URL of your personal shares feed then paste it in the first line&lt;br /&gt;// in the script.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var sharedURL='';  // Place your url between the quotes.&lt;br /&gt;&lt;br /&gt;function getFeed(url, callback) {&lt;br /&gt;   var newScript = document.createElement('script');&lt;br /&gt;       newScript.type = 'text/javascript';&lt;br /&gt;       newScript.src = 'http://pipes.yahoo.com/pipes/9oyONQzA2xGOkM4FqGIyXQ/run?&amp;_render=JSON&amp;_callback='+callback+'&amp;feed=' + sharedURL;&lt;br /&gt;   document.getElementsByTagName("head")[0].appendChild(newScript);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function dzone(feed) {&lt;br /&gt;   var tmp='';&lt;br /&gt;   for (var i=0; i&lt;feed.value.items.length; i++) {&lt;br /&gt;      tmp+='&lt;a href="'+feed.value.items[i].link+'" rel="nofollow"&gt;';&lt;br /&gt;      tmp+=feed.value.items[i].title+'&lt;/a&gt;&lt;br&gt;';&lt;br /&gt;   }&lt;br /&gt;   document.getElementById('dzoneLinks').innerHTML=tmp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;getFeed(sharedURL, 'dzone');&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;// Paste that code at the end of your page.   In your HTML place the following two divisions&lt;br /&gt;// where you would like your feed to appear.  (feel free to style the divisions however you wish)&lt;br /&gt;// you can add to/subtract from the outer division but the inner division will always be overwritten&lt;br /&gt;// with your shares.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;div id='dzoneLayer'&gt;&lt;br /&gt;My DZONE Recommendations&lt;br /&gt;   &lt;div id='dzoneLinks'&gt;&lt;br /&gt;   &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Thu, 12 Apr 2007 05:49:24 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3803</guid>
      <author>pcx99 (Patrick)</author>
    </item>
    <item>
      <title>JSON Parser in Haskell</title>
      <link>http://snippets.dzone.com/posts/show/3660</link>
      <description>I've been having trouble writing parsers recently, and I've been meaning to get to grips with Haskell at some point, so I figured I'd write a simple JSON parser using Haskell's Parsec library. Here's the code for it:&lt;br /&gt;&lt;br /&gt;Update: I've modified this to use Data.Map instead of a list of key value pairs for the record / object implementation. I've also removed the 'identifier' feature as it isn't really part of JSON proper. Also, I've noticed that this seems to have acquired some sort of presence on google. This isn't really very good code - it's more a demonstration of parsec than it is an actually useful parser. (I mean, it works fine, and it's probably sufficient for trivial uses, but I wouldn't e.g. guarantee it to be bug free). I strongly recommend using &lt;a href="http://www.lshift.net/blog/2006/07/13/writing-ajax-applications-in-haskell"&gt;this one&lt;/a&gt; instead. &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import Text.ParserCombinators.Parsec&lt;br /&gt;import System&lt;br /&gt;import qualified Data.Map as Map&lt;br /&gt;&lt;br /&gt;-- Main method. Currently not very interesting - just a test piece of code which accepts&lt;br /&gt;-- a file and prints out a representation of the parsed type (or an error message if it is&lt;br /&gt;-- invalid.&lt;br /&gt;mainParser = do {&lt;br /&gt;    val &lt;- valueParser&lt;br /&gt;    ; skipMany space&lt;br /&gt;    ; eof&lt;br /&gt;    ; return val }&lt;br /&gt;&lt;br /&gt;main :: IO ()&lt;br /&gt;main = do {&lt;br /&gt;    args &lt;- getArgs &lt;br /&gt;  ; val &lt;- parseFromFile mainParser $ args !! 0 &lt;br /&gt;  ; print(val) } &lt;br /&gt;&lt;br /&gt;-- Matches string literals. &lt;br /&gt;literalString :: Parser JSON &lt;br /&gt;literalString = do {&lt;br /&gt;        char '"'&lt;br /&gt;      ;  val &lt;-  many1 letter&lt;br /&gt;      ;  char '"'&lt;br /&gt;      ; return $ LiteralString val}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- Data type representing a JSON AST. Roughly corresponds to a Javascript object.&lt;br /&gt;data JSON = ListValue [JSON] &lt;br /&gt;          | LiteralString String&lt;br /&gt;          | LiteralInt Integer&lt;br /&gt;          | LiteralBoolean Bool&lt;br /&gt;          | RecordValue (Map.Map String JSON)&lt;br /&gt;            deriving Show         &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- Combined parser.&lt;br /&gt;valueParser :: Parser JSON&lt;br /&gt;valueParser =       &lt;br /&gt;        literalString&lt;br /&gt;    &lt;|&gt; literalInt&lt;br /&gt;    &lt;|&gt; literalBoolean&lt;br /&gt;    &lt;|&gt; recordParser&lt;br /&gt;    &lt;|&gt; listParser &lt;br /&gt;&lt;br /&gt;-- Matches literal integers.&lt;br /&gt;literalInt :: Parser JSON&lt;br /&gt;literalInt = do {&lt;br /&gt;    ; val &lt;- many1 digit&lt;br /&gt;    ; return $ LiteralInt (read val)&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;-- Matches boolean literals&lt;br /&gt;literalBoolean :: Parser JSON&lt;br /&gt;literalBoolean =&lt;br /&gt;                do{ &lt;br /&gt;                  string "true"&lt;br /&gt;                ; return $ LiteralBoolean True}&lt;br /&gt;            &lt;|&gt; do{&lt;br /&gt;                  string "false"&lt;br /&gt;                ; return $ LiteralBoolean False}&lt;br /&gt;&lt;br /&gt;-- Code for parsing lists.&lt;br /&gt;-- Matches comma separated lists enclosed in [ ]&lt;br /&gt;listParser :: Parser JSON &lt;br /&gt;listParser = do{ &lt;br /&gt;                char '['&lt;br /&gt;              ; words &lt;- sepBy1 valueParser listSeparator&lt;br /&gt;              ; char ']'&lt;br /&gt;              ; return $ ListValue words&lt;br /&gt;              }&lt;br /&gt;&lt;br /&gt;-- Matches ',' with any amount of space on either side.&lt;br /&gt;listSeparator :: Parser ()&lt;br /&gt;listSeparator = do{ &lt;br /&gt;      skipMany space &lt;br /&gt;    ; char ','&lt;br /&gt;    ; skipMany space&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;-- Code for parsing records.&lt;br /&gt;-- Matches { word : JSON; word : JSON; word : value; ... }&lt;br /&gt;recordParser :: Parser JSON &lt;br /&gt;recordParser = do{&lt;br /&gt;      char '{'&lt;br /&gt;    ; defs &lt;- endBy definitionParser definitionSeparator&lt;br /&gt;    ; char '}'&lt;br /&gt;    ; return $ RecordValue $ Map.fromList defs &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;-- Matches things of the form word : JSON&lt;br /&gt;definitionParser :: Parser (String, JSON)&lt;br /&gt;definitionParser = do{&lt;br /&gt;      skipMany space&lt;br /&gt;    ; key &lt;- many1 letter &lt;br /&gt;    ; skipMany space&lt;br /&gt;    ; char ':'&lt;br /&gt;    ; skipMany space&lt;br /&gt;    ; val &lt;- valueParser&lt;br /&gt;    ; return (key, val)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;-- Matches ';' with any amount of space on either side.&lt;br /&gt;definitionSeparator :: Parser ()&lt;br /&gt;definitionSeparator = do {&lt;br /&gt;      skipMany space&lt;br /&gt;    ; char ';'&lt;br /&gt;    ; skipMany space&lt;br /&gt;    ; return () &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 11 Mar 2007 14:52:38 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3660</guid>
      <author>DRMacIver (David R. MacIver)</author>
    </item>
    <item>
      <title>Associate array to XML and JSON</title>
      <link>http://snippets.dzone.com/posts/show/3391</link>
      <description>PHP Associate array data&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$data = array(&lt;br /&gt;    "hoge" =&gt; 123,&lt;br /&gt;    "foo" =&gt; 456,&lt;br /&gt;    "bar" =&gt; 789,&lt;br /&gt;    "aaa" =&gt; array(&lt;br /&gt;        "abc" =&gt; 111,&lt;br /&gt;        "bcd" =&gt; 222,&lt;br /&gt;        "cde" =&gt; 333&lt;br /&gt;    ),&lt;br /&gt;    "bbb" =&gt; array(&lt;br /&gt;        "def" =&gt; array(&lt;br /&gt;            "efg" =&gt; "hoge"&lt;br /&gt;        )&lt;br /&gt;    )&lt;br /&gt;);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;to XML&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$xml = new XmlWriter();&lt;br /&gt;$xml-&gt;openMemory();&lt;br /&gt;$xml-&gt;startDocument('1.0', 'UTF-8');&lt;br /&gt;$xml-&gt;startElement('root');&lt;br /&gt;&lt;br /&gt;function write(XMLWriter $xml, $data){&lt;br /&gt;    foreach($data as $key =&gt; $value){&lt;br /&gt;        if(is_array($value)){&lt;br /&gt;            $xml-&gt;startElement($key);&lt;br /&gt;            write($xml, $value);&lt;br /&gt;            $xml-&gt;endElement();&lt;br /&gt;            continue;&lt;br /&gt;        }&lt;br /&gt;        $xml-&gt;writeElement($key, $value);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;write($xml, $data);&lt;br /&gt;&lt;br /&gt;$xml-&gt;endElement();&lt;br /&gt;echo $xml-&gt;outputMemory(true);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;output XML&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&lt;root&gt;&lt;br /&gt;    &lt;hoge&gt;123&lt;/hoge&gt;&lt;br /&gt;    &lt;foo&gt;456&lt;/foo&gt;&lt;br /&gt;    &lt;bar&gt;789&lt;/bar&gt;&lt;br /&gt;    &lt;aaa&gt;&lt;br /&gt;        &lt;abc&gt;111&lt;/abc&gt;&lt;br /&gt;        &lt;bcd&gt;222&lt;/bcd&gt;&lt;br /&gt;        &lt;cde&gt;333&lt;/cde&gt;&lt;br /&gt;    &lt;/aaa&gt;&lt;br /&gt;    &lt;bbb&gt;&lt;br /&gt;        &lt;def&gt;&lt;br /&gt;            &lt;efg&gt;hoge&lt;/efg&gt;&lt;br /&gt;        &lt;/def&gt;&lt;br /&gt;    &lt;/bbb&gt;&lt;br /&gt;&lt;/root&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;to JSON&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;echo json_encode($data);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;output JSON&lt;br /&gt;&lt;code&gt;&lt;br /&gt;{&lt;br /&gt;    "hoge":123,&lt;br /&gt;    "foo":456,&lt;br /&gt;    "bar":789,&lt;br /&gt;    "aaa":{&lt;br /&gt;        "abc":111,&lt;br /&gt;        "bcd":222,&lt;br /&gt;        "cde":333&lt;br /&gt;    },&lt;br /&gt;    "bbb":{&lt;br /&gt;        "def":{&lt;br /&gt;            "efg":"hoge"&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Requires PHP5.2.x or xmlwriter extension, json extension</description>
      <pubDate>Tue, 30 Jan 2007 19:12:58 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3391</guid>
      <author>nowel (hata)</author>
    </item>
    <item>
      <title>Active Record to_hash</title>
      <link>http://snippets.dzone.com/posts/show/3082</link>
      <description>With this mix-in, you can have nice "to_hash" methods on your active record objects.  &lt;br /&gt;&lt;br /&gt;I find it good for programming JSON apps.&lt;br /&gt;&lt;br /&gt;In lib/ar_hashing.rb&lt;br /&gt;&lt;code&gt;&lt;br /&gt;module ActiveRecordHashing&lt;br /&gt;  def to_hash&lt;br /&gt;      Hash[*self.map{ |m| [m.id, m]}.flatten]               &lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and in config/environment.rb&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'ar_hashing'&lt;br /&gt;&lt;br /&gt;class ActiveRecord::Associations::AssociationCollection&lt;br /&gt;  include ActiveRecordHashing&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 05 Dec 2006 05:13:47 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3082</guid>
      <author>standsolid (Kenny)</author>
    </item>
    <item>
      <title>Simple JSON and deep clone</title>
      <link>http://snippets.dzone.com/posts/show/749</link>
      <description>&lt;code&gt;&lt;br /&gt;Object.prototype.deep_clone = function(){&lt;br /&gt;	eval("var tmp = " + this.toJSON());&lt;br /&gt;	return tmp;&lt;br /&gt;}&lt;br /&gt;Object.prototype.toJSON = function(){&lt;br /&gt;	var json = [];&lt;br /&gt;	for(var i in this){&lt;br /&gt;		if(!this.hasOwnProperty(i)) continue;&lt;br /&gt;		//if(typeof this[i] == "function") continue;&lt;br /&gt;		json.push(&lt;br /&gt;			i.toJSON() + " : " +&lt;br /&gt;			((this[i] != null) ? this[i].toJSON() : "null")&lt;br /&gt;		)&lt;br /&gt;	}&lt;br /&gt;	return "{\n " + json.join(",\n ") + "\n}";&lt;br /&gt;}&lt;br /&gt;Array.prototype.toJSON = function(){&lt;br /&gt;	for(var i=0,json=[];i&lt;this.length;i++)&lt;br /&gt;		json[i] = (this[i] != null) ? this[i].toJSON() : "null";&lt;br /&gt;	return "["+json.join(", ")+"]"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;String.prototype.toJSON = function(){&lt;br /&gt;	return '"' +&lt;br /&gt;		this.replace(/(\\|\")/g,"\\$1")&lt;br /&gt;		.replace(/\n|\r|\t/g,function(){&lt;br /&gt;			var a = arguments[0];&lt;br /&gt;			return  (a == '\n') ? '\\n':&lt;br /&gt;					(a == '\r') ? '\\r':&lt;br /&gt;					(a == '\t') ? '\\t': ""&lt;br /&gt;		}) +&lt;br /&gt;		'"'&lt;br /&gt;}&lt;br /&gt;Boolean.prototype.toJSON = function(){return this}&lt;br /&gt;Function.prototype.toJSON = function(){return this}&lt;br /&gt;Number.prototype.toJSON = function(){return this}&lt;br /&gt;RegExp.prototype.toJSON = function(){return this}&lt;br /&gt;&lt;br /&gt;// strict but slow&lt;br /&gt;String.prototype.toJSON = function(){&lt;br /&gt;	var tmp = this.split("");&lt;br /&gt;	for(var i=0;i&lt;tmp.length;i++){&lt;br /&gt;		var c = tmp[i];&lt;br /&gt;		(c &gt;= ' ') ?&lt;br /&gt;			(c == '\\') ? (tmp[i] = '\\\\'):&lt;br /&gt;			(c == '"')  ? (tmp[i] = '\\"' ): 0 :&lt;br /&gt;		(tmp[i] = &lt;br /&gt;			(c == '\n') ? '\\n' :&lt;br /&gt;			(c == '\r') ? '\\r' :&lt;br /&gt;			(c == '\t') ? '\\t' :&lt;br /&gt;			(c == '\b') ? '\\b' :&lt;br /&gt;			(c == '\f') ? '\\f' :&lt;br /&gt;			(c = c.charCodeAt(),('\\u00' + ((c&gt;15)?1:0)+(c%16)))&lt;br /&gt;		)&lt;br /&gt;	}&lt;br /&gt;	return '"' + tmp.join("") + '"';&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var json = {&lt;br /&gt; str : "abcde",&lt;br /&gt; num : 6,&lt;br /&gt; reg : /foobar/i,&lt;br /&gt; array : [1,2,3,4,5],&lt;br /&gt; func : function(x,y){return x+y},&lt;br /&gt; obj : {a : "b"}&lt;br /&gt;}.toJSON();&lt;br /&gt;&lt;br /&gt;alert(json);&lt;br /&gt;// result&lt;br /&gt;{&lt;br /&gt; "str" : "abcde",&lt;br /&gt; "num" : 6,&lt;br /&gt; "reg" : /foobar/i,&lt;br /&gt; "array" : [1, 2, 3, 4, 5],&lt;br /&gt; "func" : function(x,y){return x+y},&lt;br /&gt; "obj" : {&lt;br /&gt; "a" : "b"&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 19 Sep 2005 05:25:29 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/749</guid>
      <author>ma.la (ma.la)</author>
    </item>
  </channel>
</rss>
