Codeception - остальное - вернуть ключ х из массива
Я пытаюсь получить ключ из массива, который Codeception тянет назад через его модуль REST, более конкретно, метод' grabDataFromJsonResponse'. Я хотел бы вытащить первый ключ из этого массива, так как функция grabDataFromJsonResponse позволяет мне выбрать достаточно далеко, чтобы вернуть только нужные мне данные. Однако кодек, похоже, преобразует его в объект, и, таким образом, я получаю неверный ключ. Ниже приведен пример кода, а также образец (вверху) объекта массива, который является Codeception возвращение:
public function returningArrayKey(WebGuy $I)
{
$I->sendPOST(mypostdata);
$I->seeResponseCodeIs(200);
$I->seeResponseContains("Success");
$jsonListingObj = $I->grabDataFromJsonResponse("tree.traversing.traversed");
$I->checkAgainstKey("123456789", key($jsonListingObj));
}
Функция checkAgainstKey просто выполняет AssertEquals:
function compareListingId($listingId, $oJsonObjectData)
{
$this->assertEquals($listingId, $oJsonObjectData);
}
Однако, assertEquals всегда будет терпеть неудачу, потому что первый ключ выглядит следующим образом:
CodeceptionMaybe Object
(
[position:protected] => 0
[val:protected] => Array
(
[123456] => Array
( etc.
Использование ключа (), как указано выше, возвращает 'position: protected'. Как я могу копаться в массиве и возвращать 123456? Ключ массива представлены 123456 будет динамический, основанный на реакции остальных.
Спасибо!
1 ответ:
Окончательное решение состояло в том, чтобы привести объект в виде массива, разрезать массив (потому что объект Codeception, возможно, преобразованный в массив, добавляет открытые свойства и такие, которые мы хотим удалить) и вытащить нужный ключ:
$jsonListingObj = $I->grabDataFromJsonResponse("tree.traversing.traversed"); $jsonListingArray = (array)$jsonListingObj; $JSONParsed = key(current(array_slice($jsonListingArray, 1,1)));
$JSONParsed возвращает значение '123456' в приведенном выше примере.