格式化Postman/GET请求的可能json输出的对象数组



所以我似乎不明白这一点,所以我想看看是否有人能帮我。

请告诉我最好的输出是什么,这样我就可以使用GET为我创建的端点检索干净的数据

我有以下方法

function instagram_posts(): bool|string
{
if (!function_exists('is_plugin_active')) {
include_once(ABSPATH . 'wp-admin/includes/plugin.php');
}
if (!is_plugin_active('fh-instagram/autoload.php')) {
return false;
}
if (empty($items = Instagram::get_items_for_api(50))) {
return false;
}
var_dump($items);
var_dump(json_encode($items));
return json_encode($items);
}

var_dump($items);给我以下输出:

array(50) {
[0]=>
object(PluginInstagramItem)#976 (7) {
["id":"PluginInstagramItem":private]=>
}
[1]=>
object(PluginInstagramItem)#1030 (7) {
["id":"PluginInstagramItem":private]=>
string(17) "17842233125750202"
}
}

当我运行var_dump(json_encode($items));时,我得到以下输出:

string(151) "[{},{}]"

我如何转换我的对象数组,以便它可以将其转换为json,然后在Postman中使用它?这就是它目前在Postman:中的样子

array(50) {
[0]=>
object(PluginInstagramItem)#973 (7) {
["id":"PluginInstagramItem":private]=>
string(17) "17992874035441353"
}
[1]=>
object(PluginInstagramItem)#1027 (7) {
["id":"PluginInstagramItem":private]=>
string(17) "17842233125750202"
}
}

应输出如下:

[
{"id": etc..}
]

我们将感谢所有的帮助!

下面使用的是instagram_posts方法:

add_action('rest_api_init', function () {
register_rest_route( 'instagram', '/posts/', [
'methods'  => 'GET',
'callback' => 'instagram_posts',
]);
});

所以我可以使用Postman访问端点:http://headlesscms.com.local/wp-json/instagram/posts

由于您想要的属性是私有的,因此它不会包含在json_encode()的结果中。只有公共财产会。

您需要创建一个具有所需结构的多维数组,并对其进行编码。

// This is the new array we will push the sub arrays into
$results = [];
foreach($items as $item) {
$results[] = ['id' => $item->get_id()];
}
return json_encode($results);

这将为您提供一个json结构,看起来像:

[
{
"id": 1
},
{
"id": 2
},
...
]

替代格式

如果您只想要一个id的列表,那么您可能不需要创建多维数组,而只需要返回一个id列表。

在这种情况下,请执行以下操作:

$results = [];
foreach ($items as $item) {
$results[] = $item->get_id();
}
return json_encode($results);

这会给你:

[
1,
2,
...
]

最新更新