我正在尝试从一个数组中获取一个密钥,Codeception正在通过它的REST模块,更具体地说,' grabDataFromJsonResponse'方法。我想从该数组中提取第一个键,因为grabDataFromJsonResponse函数允许我选择足够远,只返回我需要的数据。但是,Codeception似乎将它转换为一个对象,因此,我得到了错误的密钥。下面是一个codeample,以及一个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总是会失败,因为第一个键如下:
Codeception\Maybe Object
(
[position:protected] => 0
[val:protected] => Array
(
[123456] => Array
( etc.
使用上面的key()返回' position:protected'。如何挖掘数组并返回123456?由123456表示的数组键将基于REST响应动态显示。
谢谢!
答案 0 :(得分:1)
最后的解决方案是将对象转换为数组,对数组进行切片(因为Codeception的Maybe对象转换为数组会添加公共属性并且我们想要去除),并拉出所需的键:
$jsonListingObj = $I->grabDataFromJsonResponse("tree.traversing.traversed");
$jsonListingArray = (array)$jsonListingObj;
$JSONParsed = key(current(array_slice($jsonListingArray, 1,1)));
$ JSONParsed然后在上面的例子中返回'123456'。