diff options
author | Scott MacVicar <scottmac@php.net> | 2009-03-17 23:15:17 +0000 |
---|---|---|
committer | Scott MacVicar <scottmac@php.net> | 2009-03-17 23:15:17 +0000 |
commit | bc51a1e9f72d7e94e28282aba36359e9f836af5c (patch) | |
tree | fa0004dcee64f749dcc10cf7b76f816cdf6a2312 | |
parent | f3d11b4415a2e97350e4ba0c08848d83ea1e6f40 (diff) | |
download | php-git-bc51a1e9f72d7e94e28282aba36359e9f836af5c.tar.gz |
Add PHP_JSON_FORCE_OBJECT for forcing an object output of an array
-rw-r--r-- | ext/json/json.c | 4 | ||||
-rw-r--r-- | ext/json/tests/002.phpt | 10 |
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 |