From a2bf2598ceb79044203a05e3d9e4e8334448359c Mon Sep 17 00:00:00 2001 From: LAV45 Date: Sun, 29 Nov 2015 01:24:43 +0300 Subject: [PATCH] Release fix from SilverFire --- framework/helpers/BaseJson.php | 6 +++--- tests/framework/helpers/JsonTest.php | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/framework/helpers/BaseJson.php b/framework/helpers/BaseJson.php index 519faf172d..ecf9eb4daf 100644 --- a/framework/helpers/BaseJson.php +++ b/framework/helpers/BaseJson.php @@ -132,9 +132,7 @@ class BaseJson */ protected static function processData($data, &$expressions, $expPrefix) { - if ($data instanceof \Traversable) { - return $data; - } elseif (is_object($data)) { + if (is_object($data)) { if ($data instanceof JsExpression) { $token = "!{[$expPrefix=" . count($expressions) . ']}!'; $expressions['"' . $token . '"'] = $data->expression; @@ -144,6 +142,8 @@ class BaseJson $data = $data->jsonSerialize(); } elseif ($data instanceof Arrayable) { $data = $data->toArray(); + } elseif ($data instanceof \SimpleXMLElement) { + $data = (array) $data; } else { $result = []; foreach ($data as $name => $value) { diff --git a/tests/framework/helpers/JsonTest.php b/tests/framework/helpers/JsonTest.php index 94bdc6c2ff..b175ea0f2d 100644 --- a/tests/framework/helpers/JsonTest.php +++ b/tests/framework/helpers/JsonTest.php @@ -7,6 +7,7 @@ use yii\helpers\BaseJson; use yii\helpers\Json; use yiiunit\TestCase; use yii\web\JsExpression; +use yiiunit\framework\web\Post; /** * @group helpers @@ -113,6 +114,12 @@ class JsonTest extends TestCase $document = simplexml_load_string($xml); $this->assertSame('{"apiKey":"ieu2iqw4o","methodProperties":{"FindByString":"Kiev"}}', Json::encode($document)); + + $postsStack = new \SplStack(); + $postsStack->push(new Post(915, 'record1')); + $postsStack->push(new Post(456, 'record2')); + + $this->assertSame('{"1":{"id":456,"title":"record2"},"0":{"id":915,"title":"record1"}}', Json::encode($postsStack)); } public function testDecode()