summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott MacVicar <scottmac@php.net>2009-03-17 23:15:17 +0000
committerScott MacVicar <scottmac@php.net>2009-03-17 23:15:17 +0000
commitbc51a1e9f72d7e94e28282aba36359e9f836af5c (patch)
treefa0004dcee64f749dcc10cf7b76f816cdf6a2312
parentf3d11b4415a2e97350e4ba0c08848d83ea1e6f40 (diff)
downloadphp-git-bc51a1e9f72d7e94e28282aba36359e9f836af5c.tar.gz
Add PHP_JSON_FORCE_OBJECT for forcing an object output of an array
-rw-r--r--ext/json/json.c4
-rw-r--r--ext/json/tests/002.phpt10
2 files changed, 13 insertions, 1 deletions
diff --git a/ext/json/json.c b/ext/json/json.c
index f035cd147d..33e637ad7e 100644
--- a/ext/json/json.c
+++ b/ext/json/json.c
@@ -41,6 +41,7 @@ static const char digits[] = "0123456789abcdef";
#define PHP_JSON_HEX_AMP (1<<1)
#define PHP_JSON_HEX_APOS (1<<2)
#define PHP_JSON_HEX_QUOT (1<<3)
+#define PHP_JSON_FORCE_OBJECT (1<<4)
ZEND_DECLARE_MODULE_GLOBALS(json)
@@ -75,6 +76,7 @@ static PHP_MINIT_FUNCTION(json)
REGISTER_LONG_CONSTANT("JSON_HEX_AMP", PHP_JSON_HEX_AMP, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_HEX_APOS", PHP_JSON_HEX_APOS, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_HEX_QUOT", PHP_JSON_HEX_QUOT, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("JSON_FORCE_OBJECT", PHP_JSON_FORCE_OBJECT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_NONE", PHP_JSON_ERROR_NONE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_DEPTH", PHP_JSON_ERROR_DEPTH, CONST_CS | CONST_PERSISTENT);
@@ -174,7 +176,7 @@ static void json_encode_array(smart_str *buf, zval **val, int options TSRMLS_DC)
if (Z_TYPE_PP(val) == IS_ARRAY) {
myht = HASH_OF(*val);
- r = json_determine_array_type(val TSRMLS_CC);
+ r = (options & PHP_JSON_FORCE_OBJECT) ? 1 : json_determine_array_type(val TSRMLS_CC);
} else {
myht = Z_OBJPROP_PP(val);
r = 1;
diff --git a/ext/json/tests/002.phpt b/ext/json/tests/002.phpt
index c995f9e455..02d872db40 100644
--- a/ext/json/tests/002.phpt
+++ b/ext/json/tests/002.phpt
@@ -8,8 +8,14 @@ json_encode() tests
var_dump(json_encode(""));
var_dump(json_encode(NULL));
var_dump(json_encode(TRUE));
+
var_dump(json_encode(array(""=>"")));
var_dump(json_encode(array(array(1))));
+var_dump(json_encode(array()));
+
+var_dump(json_encode(array(""=>""), JSON_FORCE_OBJECT));
+var_dump(json_encode(array(array(1)), JSON_FORCE_OBJECT));
+var_dump(json_encode(array(), JSON_FORCE_OBJECT));
var_dump(json_encode(1));
var_dump(json_encode("руссиш"));
@@ -23,6 +29,10 @@ string(4) "null"
string(4) "true"
string(7) "{"":""}"
string(5) "[[1]]"
+string(2) "[]"
+string(7) "{"":""}"
+string(13) "{"0":{"0":1}}"
+string(2) "{}"
string(1) "1"
string(38) ""\u0440\u0443\u0441\u0441\u0438\u0448""
Done