skytools: JSON wrapper
authorMarko Kreen <markokr@gmail.com>
Thu, 23 Sep 2010 00:52:39 +0000 (17:52 -0700)
committerMarko Kreen <markokr@gmail.com>
Thu, 23 Sep 2010 00:54:03 +0000 (17:54 -0700)
- find working JSON module
- easier kwargs API

python/skytools/quoting.py

index e83d24954ffb714eef99f5e95e5244ff8055c4d7..e46f42dddffbb110add5c287d5bace4f3162494c 100644 (file)
@@ -13,6 +13,7 @@ __all__ = [
     "quote_bytea_literal", "quote_bytea_copy", "quote_statement",
     "quote_ident", "quote_fqident", "quote_json", "unescape_copy",
     "unquote_ident", "unquote_fqident",
+    "json_encode", "json_decode",
 ]
 
 try:
@@ -145,6 +146,39 @@ def unquote_fqident(val):
     tmp = val.split('.', 1)
     return "%s.%s" % (unquote_ident(tmp[0]), unquote_ident(tmp[1]))
 
+# accept simplejson or py2.6+ json module
+# search for simplejson first as there exists
+# incompat 'json' module
+try:
+    import simplejson as json
+except ImportError:
+    try:
+        import json
+    except:
+        pass
+
+def json_encode(val = None, **kwargs):
+    """Creates JSON string from Python object.
+
+    >>> json_encode({'a': 1})
+    '{"a": 1}'
+    >>> json_encode('a')
+    '"a"'
+    >>> json_encode(['a'])
+    '["a"]'
+    >>> json_encode(a=1)
+    '{"a": 1}'
+    """
+    return json.dumps(val or kwargs)
+
+def json_decode(s):
+    """Parses JSON string into Python object.
+
+    >>> json_decode('[1]')
+    [1]
+    """
+    return json.loads(s)
+
 if __name__ == '__main__':
     import doctest
     doctest.testmod()