🔥 Just Launched! Werra Premium Template for HyväSee it in Action

Solved: “Unable to Unserialize Value” in Magento 2.2

By Sanjay JethvaUpdated on May 22, 2025 2 min read

Ever faced an error like “unable to unserialize value” while working with system configuration in Magento 2.2 admin panel? It is because of the \Magento\Framework\Serialize\Serializer\Json class.

The file  vendor/magento/framework/Serialize/Serializer/Json.php is causing the problem. The function unserialize($string) returns an exception if the string is already serialized.

Solution for “Unable to Unserialize Value” in Magento 2.2:

Open vendor/magento/framework/Serialize/Serializer/Json.php file.

Find the following funcion in file.

    public function unserialize($string)
    {
      $result = json_decode($string, true);
      if (json_last_error() !== JSON_ERROR_NONE) {
        throw new \InvalidArgumentException('Unable to unserialize value.');
      }
       return $result;
    }

Modify the function by adding the following code:

    public function unserialize($string)
    {
        /* Added this code to resolve the issue */
        if($this->is_serialized($string)){
           $string = $this->serialize($string);
        }
    /*---------------------------------*/
        $result = json_decode($string, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
         throw new \InvalidArgumentException('Unable to unserialize value.');
        }
        return $result;
    }

Add is_serialized() function in same file vendor/magento/framework/Serialize/Serializer/Json.php at the end:

    function is_serialized($value, &$result = null)
    {
    // Bit of a give away this one
    if (!is_string($value)) {
        return false;
    }
    // Serialized false, return true. unserialize() returns false on an
    // invalid string or it could return false if the string is serialized
    // false, eliminate that possibility.
    if ($value === 'b:0;') {
        $result = false;
        return true;
    }
    $length = strlen($value);
    $end = '';
    switch ($value[0]) {
        case 's':
            if ($value[$length - 2] !== '"') {
                return false;
            }
        case 'b':
        case 'i':
        case 'd':
            // This looks odd but it is quicker than isset()ing
            $end .= ';';
        case 'a':
        case 'O':
            $end .= '}';
            if ($value[1] !== ':') {
                return false;
            }
            switch ($value[2]) {
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                    break;
                default:
                    return false;
            }
        case 'N':
            $end .= ';';
            if ($value[$length - 1] !== $end[0]) {
                return false;
            }
            break;
        default:
            return false;
    }
    if (($result = @unserialize($value)) === false) {
        $result = null;
        return false;
    }
    return true;
}

Unserialize the previous values and serialize them back with json. Implement the above code to solve the error “Unable to Unserialize Value” in Magento 2.2.

Sanjay Jethva Full Image
Article bySanjay Jethva

Sanjay is the co-founder and CTO of Meetanshi with hands-on expertise with Magento since 2011. He specializes in complex development, integrations, extensions, and customizations. Sanjay is one the top 50 contributor to the Magento community and is recognized by Adobe. His passion for Magento 2 and Shopify solutions has made him a trusted source for businesses seeking to optimize their online stores. He loves sharing technical solutions related to Magento 2 & Shopify.