diff options
-rw-r--r-- | ext/json/json_parser.y | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/ext/json/json_parser.y b/ext/json/json_parser.y index ba7311c963..aec9b225b8 100644 --- a/ext/json/json_parser.y +++ b/ext/json/json_parser.y @@ -76,6 +76,8 @@ int json_yydebug = 1; %code { static int php_json_yylex(union YYSTYPE *value, php_json_parser *parser); static void php_json_yyerror(php_json_parser *parser, char const *msg); +static int php_json_parser_array_create(php_json_parser *parser, zval *array); +static int php_json_parser_object_create(php_json_parser *parser, zval *array); } @@ -120,7 +122,11 @@ object_end: members: /* empty */ { - parser->methods.object_create(parser, &$$); + if ((parser->scanner.options & PHP_JSON_OBJECT_AS_ARRAY) && parser->methods.object_create == php_json_parser_object_create) { + ZVAL_EMPTY_ARRAY(&$$); + } else { + parser->methods.object_create(parser, &$$); + } } | member ; @@ -180,7 +186,11 @@ array_end: elements: /* empty */ { - parser->methods.array_create(parser, &$$); + if (parser->methods.array_create == php_json_parser_array_create) { + ZVAL_EMPTY_ARRAY(&$$); + } else { + parser->methods.array_create(parser, &$$); + } } | element ; |