Magento 2:如何从API返回JSON对象?

假设这AppFactory\Core\Api\SettingInterface::get()是一个REST端点。在这种情况下,您需要在phpdoc注释中定义返回的内容。Magento REST处理程序将采用该值并对其进行处理,以删除所有不必要的数据。剩下的将被编码为JSON,因此在javascript中,您可以将其检索为已经正确的JS hash  ,而不是json编码的字符串。

关于这些端点的诀窍是,您需要非常精确地定义返回的内容。Magento将无法处理像“数组”这样的常规内容,您可以在其中设置所需的任何内容。

在您的情况下,为了不尝试使用字符串数组,创建端点将返回的接口会更加容易

 <?php

 namespace AppFactory\Core\Api;

 /**
  * @api
  */

 interface SettingsInterface
 {


     /**
      * @return Data\SettingsInterface
      */
     public function get();
 }

现在,当您返回实现该接口的对象的实例时,Magento将读取其phpdocs并将处理其返回值。现在AppFactory\Core\Api\Data\SettingsInterface按如下方式创建文件

<?php

namespace AppFactory\Core\Api\Data;

interface SettingsInterface
{
    /**
    * @return int[]
    **/
    public function getSettings();

    /**
    * @return string[]
    **/
    public function getExtra();
}

现在,当您创建将实现这2个get方法的实际类时,将在其中返回它,AppFactory\Core\Api\SettingsInterface::get()那么magento将返回类似

{
    "settings": [1, 2, 5],
    "extra": ["my","array","of","strings"]
}

如果需要另一个级别,则需要创建另一个接口,该接口将保留settings结构并将其添加为的返回值AppFactory\Core\Api\Data\SettingsInterface::getSettings()

如果您需要动态的东西,并且您不希望或无法准备此结构接口,则可以尝试@return string为任何字段设置json编码的字符串和位置。但是,通过这种方式,您必须确保在收到响应后手动解码该字符串,因为这样您的响应将如下所示:

{
    "settings": [1, 2, 5],
    "extra": "{\"test\":\"string\",\"value\":8}"
}

为了使用,response.extra.test您必须先response.extra = JSON.parse(response.extra);

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论