Commit fceb2d6e by Qiang Xue

Fixes #957: Json::encode() doesn't handle empty object correctly.

parent aede3c9f
......@@ -81,32 +81,26 @@ class BaseJson
*/
protected static function processData($data, &$expressions, $expPrefix)
{
if (is_array($data)) {
foreach ($data as $key => $value) {
if (is_array($value) || is_object($value)) {
$data[$key] = static::processData($value, $expressions, $expPrefix);
}
}
return $data;
} elseif (is_object($data)) {
if (is_object($data)) {
if ($data instanceof JsExpression) {
$token = "!{[$expPrefix=" . count($expressions) . ']}!';
$expressions['"' . $token . '"'] = $data->expression;
return $token;
} else {
$data = $data instanceof Arrayable ? $data->toArray() : get_object_vars($data);
$result = array();
foreach ($data as $key => $value) {
if (is_array($value) || is_object($value)) {
$result[$key] = static::processData($value, $expressions, $expPrefix);
} else {
$result[$key] = $value;
}
}
$data = $data instanceof Arrayable ? $data->toArray() : get_object_vars($data);
if ($data === array() && !$data instanceof Arrayable) {
return new \stdClass();
}
}
if (is_array($data)) {
foreach ($data as $key => $value) {
if (is_array($value) || is_object($value)) {
$data[$key] = static::processData($value, $expressions, $expPrefix);
}
return $result;
}
} else {
return $data;
}
return $data;
}
}
......@@ -45,6 +45,10 @@ class JsonTest extends TestCase
'b' => new JsExpression($expression2),
);
$this->assertSame("{\"a\":[1,$expression1],\"b\":$expression2}", Json::encode($data));
// https://github.com/yiisoft/yii2/issues/957
$data = (object)null;
$this->assertSame('{}', Json::encode($data));
}
public function testDecode()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment