无法解析来自wp_Remote_Get的结果

时间:2019-06-20 作者:ellen

我正在用调用apiwp_remote_get 我似乎无法分析结果。

下面是我如何调用api的:

    $url = \'https://blah/api/data/\';
    $args = array(
        \'headers\'     => array(
            \'Authorization\' => \'Token \' . $my_token,
       ),
    ); 
    $data = wp_remote_get($url, $args);
    $data = json_encode($data);
API响应如下所示:

`{
    "headers": {},
    "body": "[{\\"name\\":\\"bob\\",\\"email\\":\\"[email protected]\\",\\"first_name\\":\\"Bob\\",\\"last_name\\":\\"Bob\\"}]"
    "response": {
        "code": 200,
        "message": "OK"
    },
    "cookies": [],
    "filename": null,
    "http_response": {
        "data": null,
        "headers": null,
        "status": null
    }
}`
现在,我想在主体中循环,它有我想要存储的数据。当我尝试时:

foreach($data["body"] as $datapoint){
    //blah
}
我得到以下错误:PHP Warning: Illegal string offset \'body\' 我无法循环查看数据。我似乎无法理解,使用json\\u encode不应该允许我将响应视为json对象吗?

感谢您的帮助!非常感谢。

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

我似乎无法理解,使用json\\u encode不应该允许我将响应视为json对象吗?

它确实允许您将其视为JSON对象,但这在PHP中是无用的。您希望将结果从JSON转换为PHP数组。

所需步骤包括:

发出远程GET请求看起来是这样的:

$request = wp_remote_get( 
    \'https://blah/api/data/\', 
    [
        \'headers\' => [
            \'Authorization\' => \'Token \' . $my_token,
        ],
    ]
);

if ( ! is_wp_error( $request ) ) {
    $body = wp_remote_retrieve_body( $request );
    $data = json_decode( $body );

    foreach ( $data as $datapoint ) {
        echo $datapoint->name;
        echo $datapoint->email;
        // etc.
    }
}

SO网友:czerspalace

应该是这样的json_decode. 您还可以尝试以下功能https://codex.wordpress.org/Function_Reference/wp_remote_retrieve_body:

$url = \'https://blah/api/data/\';
$args = array(
    \'headers\'     => array(
        \'Authorization\' => \'Token \' . $my_token,
   ),
); 
$data = wp_remote_get($url, $args);

/* Will result in $api_response being an array of data,parsed from the JSON response of the API listed above */
$api_response = json_decode( wp_remote_retrieve_body( $data ), true );

相关推荐

JSON File in Gutenberg

嗨,我想用一个新的Kategorie创建一个块。如果我选择了新的块类型,它应该会显示一个包含由JSON文件生成的选项的select字段。JSON代码如下所示。这可能吗?{ \"name\": { \"text\": \"Name\", \"value\": \"[value]\", \"content\": \"0\" } } 我读过类似服务器端渲染的内容。