PyObject* objToJSON(PyObject* self, PyObject *arg) { char buffer[65536]; char *ret; PyObject *newobj; JSONObjectEncoder encoder = { Object_beginTypeContext, //void (*beginTypeContext)(JSOBJ obj, JSONTypeContext *tc); Object_endTypeContext, //void (*endTypeContext)(JSOBJ obj, JSONTypeContext *tc); Object_getStringValue, //const char *(*getStringValue)(JSOBJ obj, JSONTypeContext *tc, size_t *_outLen); Object_getLongValue, //JSLONG (*getLongValue)(JSOBJ obj, JSONTypeContext *tc); Object_getIntValue, //JSLONG (*getLongValue)(JSOBJ obj, JSONTypeContext *tc); Object_getDoubleValue, //double (*getDoubleValue)(JSOBJ obj, JSONTypeContext *tc); Object_iterBegin, //JSPFN_ITERBEGIN iterBegin; Object_iterNext, //JSPFN_ITERNEXT iterNext; Object_iterEnd, //JSPFN_ITEREND iterEnd; Object_iterGetValue, //JSPFN_ITERGETVALUE iterGetValue; Object_iterGetName, //JSPFN_ITERGETNAME iterGetName; Object_releaseObject, //void (*releaseValue)(JSONTypeContext *ti); PyObject_Malloc, //JSPFN_MALLOC malloc; PyObject_Realloc, //JSPFN_REALLOC realloc; PyObject_Free, //JSPFN_FREE free; -1, //recursionMax 5, //default decimal precision }; ret = JSON_EncodeObject (arg, &encoder, buffer, sizeof (buffer)); if (encoder.errorMsg) { if (ret != buffer) { encoder.free (ret); } PyErr_Format (PyExc_OverflowError, "%s", encoder.errorMsg); return NULL; } newobj = PyString_FromString (ret); if (ret != buffer) { encoder.free (ret); } return newobj; }
PyObject* objToJSON(PyObject* self, PyObject *args, PyObject *kwargs) { static char *kwlist[] = { "obj", "ensure_ascii", "double_precision", "encode_html_chars", NULL}; char buffer[65536]; char *ret; PyObject *newobj; PyObject *oinput = NULL; PyObject *oensureAscii = NULL; static const int idoublePrecision = 10; // default double precision setting PyObject *oencodeHTMLChars = NULL; JSONObjectEncoder encoder = { Object_beginTypeContext, Object_endTypeContext, Object_getStringValue, Object_getLongValue, Object_getIntValue, Object_getDoubleValue, Object_iterBegin, Object_iterNext, Object_iterEnd, Object_iterGetValue, Object_iterGetName, Object_releaseObject, PyObject_Malloc, PyObject_Realloc, PyObject_Free, -1, //recursionMax idoublePrecision, 1, //forceAscii #if HAS_JSON_ENCODE_HTML_CHARS_DEFAULT_TRUE 1, //encodeHTMLChars #else 0, //encodeHTMLChars #endif }; PRINTMARK(); if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OiO", kwlist, &oinput, &oensureAscii, &idoublePrecision, &oencodeHTMLChars)) { return NULL; } if (oensureAscii != NULL && !PyObject_IsTrue(oensureAscii)) { encoder.forceASCII = 0; } if (oencodeHTMLChars != NULL && PyObject_IsTrue(oencodeHTMLChars)) { encoder.encodeHTMLChars = 1; } encoder.doublePrecision = idoublePrecision; PRINTMARK(); ret = JSON_EncodeObject (oinput, &encoder, buffer, sizeof (buffer)); PRINTMARK(); if (PyErr_Occurred()) { return NULL; } if (encoder.errorMsg) { if (ret != buffer) { encoder.free (ret); } PyErr_Format (PyExc_OverflowError, "%s", encoder.errorMsg); return NULL; } newobj = PyString_FromString (ret); if (ret != buffer) { encoder.free (ret); } PRINTMARK(); return newobj; }
PyObject* objToJSON(PyObject* self, PyObject *args, PyObject *kwargs) { static char *kwlist[] = { "obj", "ensure_ascii", NULL}; char buffer[65536]; char *ret; PyObject *newobj; PyObject *oinput = NULL; PyObject *oensureAscii = NULL; JSONObjectEncoder encoder = { Object_beginTypeContext, //void (*beginTypeContext)(JSOBJ obj, JSONTypeContext *tc); Object_endTypeContext, //void (*endTypeContext)(JSOBJ obj, JSONTypeContext *tc); Object_getStringValue, //const char *(*getStringValue)(JSOBJ obj, JSONTypeContext *tc, size_t *_outLen); Object_getLongValue, //JSLONG (*getLongValue)(JSOBJ obj, JSONTypeContext *tc); Object_getIntValue, //JSLONG (*getLongValue)(JSOBJ obj, JSONTypeContext *tc); Object_getDoubleValue, //double (*getDoubleValue)(JSOBJ obj, JSONTypeContext *tc); Object_iterBegin, //JSPFN_ITERBEGIN iterBegin; Object_iterNext, //JSPFN_ITERNEXT iterNext; Object_iterEnd, //JSPFN_ITEREND iterEnd; Object_iterGetValue, //JSPFN_ITERGETVALUE iterGetValue; Object_iterGetName, //JSPFN_ITERGETNAME iterGetName; Object_releaseObject, //void (*releaseValue)(JSONTypeContext *ti); PyObject_Malloc, //JSPFN_MALLOC malloc; PyObject_Realloc, //JSPFN_REALLOC realloc; PyObject_Free, //JSPFN_FREE free; -1, //recursionMax 5, //default decimal precision 1, //forceAscii }; PRINTMARK(); if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O", kwlist, &oinput, &oensureAscii)) { return NULL; } if (oensureAscii != NULL && !PyObject_IsTrue(oensureAscii)) { encoder.forceASCII = 0; } PRINTMARK(); ret = JSON_EncodeObject (oinput, &encoder, buffer, sizeof (buffer)); PRINTMARK(); if (PyErr_Occurred()) { return NULL; } if (encoder.errorMsg) { if (ret != buffer) { encoder.free (ret); } PyErr_Format (PyExc_OverflowError, "%s", encoder.errorMsg); return NULL; } newobj = PyString_FromString (ret); if (ret != buffer) { encoder.free (ret); } PRINTMARK(); return newobj; }
PyObject* objToJSON(PyObject* self, PyObject *args, PyObject *kwargs) { static char *kwlist[] = { "obj", "ensure_ascii", "double_precision", "encode_html_chars", "escape_forward_slashes", "sort_keys", "indent", NULL }; char buffer[65536]; char *ret; PyObject *newobj; PyObject *oinput = NULL; PyObject *oensureAscii = NULL; PyObject *oencodeHTMLChars = NULL; PyObject *oescapeForwardSlashes = NULL; PyObject *osortKeys = NULL; JSONObjectEncoder encoder = { Object_beginTypeContext, Object_endTypeContext, Object_getStringValue, Object_getLongValue, Object_getUnsignedLongValue, Object_getIntValue, Object_getDoubleValue, Object_iterNext, Object_iterEnd, Object_iterGetValue, Object_iterGetName, Object_releaseObject, PyObject_Malloc, PyObject_Realloc, PyObject_Free, -1, //recursionMax 10, // default double precision setting 1, //forceAscii 0, //encodeHTMLChars 1, //escapeForwardSlashes 0, //sortKeys 0, //indent NULL, //prv }; PRINTMARK(); if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OiOOOi", kwlist, &oinput, &oensureAscii, &encoder.doublePrecision, &oencodeHTMLChars, &oescapeForwardSlashes, &osortKeys, &encoder.indent)) { return NULL; } if (oensureAscii != NULL && !PyObject_IsTrue(oensureAscii)) { encoder.forceASCII = 0; } if (oencodeHTMLChars != NULL && PyObject_IsTrue(oencodeHTMLChars)) { encoder.encodeHTMLChars = 1; } if (oescapeForwardSlashes != NULL && !PyObject_IsTrue(oescapeForwardSlashes)) { encoder.escapeForwardSlashes = 0; } if (osortKeys != NULL && PyObject_IsTrue(osortKeys)) { encoder.sortKeys = 1; } PRINTMARK(); ret = JSON_EncodeObject (oinput, &encoder, buffer, sizeof (buffer)); PRINTMARK(); if (PyErr_Occurred()) { return NULL; } if (encoder.errorMsg) { if (ret != buffer) { encoder.free (ret); } PyErr_Format (PyExc_OverflowError, "%s", encoder.errorMsg); return NULL; } newobj = PyString_FromString (ret); if (ret != buffer) { encoder.free (ret); } PRINTMARK(); return newobj; }