无法在magento2中获取jsonEncode

vij*_*y b 4 json magento magento2

Magento有自己的json编码和解码功能:

Mage::helper('core')->jsonEncode($array);  
Run Code Online (Sandbox Code Playgroud)

以上代码在Magento 2中折旧.那么如何使用jsonEncode,我必须扩展使用json Encode?

Igo*_*nko 17

Magento 2方式是Magento\Framework\Json\Helper\Data使用DI功能传递(见打击).不要使用$this->helper()objectManager.此功能很快就会被弃用.

/**
 * @var \Magento\Framework\Json\Helper\Data
 */
protected $jsonHelper;

/**
 * Constructor.
 * 
 * @param \Magento\Framework\Json\Helper\Data $jsonHelper
 */
public function __construct(\Magento\Framework\Json\Helper\Data $jsonHelper)
{
    $this->jsonHelper = $jsonHelper;
}

/**
 * @param array $dataToEncode
 * @return string
 */
public function encodeSomething(array $dataToEncode)
{
    $encodedData = $this->jsonHelper->jsonEncode($dataToEncode);

    return $encodedData;
}
Run Code Online (Sandbox Code Playgroud)

  • 已经不推荐使用该助手。请改用`Magento \ Framework \ Serialize \ Serializer \ Json`-有`serialize`和`unserialize`方法。 (2认同)

Sil*_*mer 8

\Magento\Framework\Json\Helper\Data从Magento 2.2开始不推荐使用using ,对于> = 2.2的版本,可以使用SerializerInterface

来自Magento 2 devdocs:https ://devdocs.magento.com/guides/v2.2/extension-dev-guide/framework/serializer.html#json-default

use Magento\Framework\Serialize\SerializerInterface;

/**
 * @var SerializerInterface
 */
private $serializer;


public function __construct(SerializerInterface $serializer) {
  $this->serializer = $serializer;
}


public function encodeSomething($data) {
    return $this->serializer->serialize($data)
}

public function decodeSomething($data) {
    return $this->serializer->unserialize($data)
}
Run Code Online (Sandbox Code Playgroud)

最后调用一个运行json_encode()和json_decode()的类https://github.com/magento/magento2/blob/2.2/lib/internal/Magento/Framework/Serialize/Serializer/Json.php

所以,如果你在2.1或更低的运行,你可以使用PHP函数json_encode()json_decode(),并得到相同的结果,或使用已弃用\Magento\Framework\Json\Helper\Data