Suppongo che AppFactory\Core\Api\SettingInterface::get()
sia un endpoint REST. In tal caso, nei commenti phpdoc devi definire cosa restituirà. Il gestore Magento REST prenderà quel valore e lo elaborerà per rimuovere tutti i dati non necessari. Ciò che rimane verrà codificato in JSON, quindi in javascript puoi recuperarlo come hash JS già corretto e non come stringa con codifica json.
Il trucco di questi endpoint è che è necessario definire con precisione cosa restituirai. Magento non sarà in grado di elaborare qualcosa di così generale come "array" in cui imposterai quello che ti piace.
Nel tuo caso, per non provare a giocare con una serie di stringhe, sarà più semplice creare un'interfaccia che restituirà il tuo endpoint.
<?php
namespace AppFactory\Core\Api;
/**
* @api
*/
interface SettingsInterface
{
/**
* @return Data\SettingsInterface
*/
public function get();
}
Ora quando restituisci un'istanza di un oggetto che implementa quell'interfaccia Magento leggerà i suoi phpdocs ed elaborerà i loro valori di ritorno. Ora crea un file AppFactory\Core\Api\Data\SettingsInterface
come segue
<?php
namespace AppFactory\Core\Api\Data;
interface SettingsInterface
{
/**
* @return int[]
**/
public function getSettings();
/**
* @return string[]
**/
public function getExtra();
}
Ora quando crei una classe reale che implementerà quei 2 metodi get e la restituirai, AppFactory\Core\Api\SettingsInterface::get()
Magento restituirà qualcosa del genere
{
"settings": [1, 2, 5],
"extra": ["my","array","of","strings"]
}
Se vuoi un altro livello devi creare un'altra interfaccia che manterrà la settings
struttura e la aggiungerà come valore di ritorno per AppFactory\Core\Api\Data\SettingsInterface::getSettings()
.
Se devi avere qualcosa che sarà dinamico e non vuoi o non puoi preparare questa interfaccia di struttura, puoi provare a impostare una stringa con codifica json e posizionarla @return string
per uno qualsiasi dei campi. In questo modo, tuttavia, dovrai assicurarti di decodificare manualmente quella stringa dopo aver ricevuto la risposta poiché la tua risposta sarà simile a questa:
{
"settings": [1, 2, 5],
"extra": "{\"test\":\"string\",\"value\":8}"
}
e response.extra.test
per poterlo utilizzare devi prima fare response.extra = JSON.parse(response.extra);
manualmente