Hi all.
I know there is quite a bit on the web regarding the issue with the error "main.CRITICAL: Unable to unserialize value. Error: Syntax error [] []".
I'm getting this: "Unable to unserialize value. Error: Syntax error".
I used the solution to update the Serializer/Json.php file but all that has changed is the error message is now: "main.CRITICAL: Unable to unserialize value. [] []"
This hasn't solved my issue.
Update code i used is:
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Serialize\Serializer;
use Magento\Framework\Serialize\SerializerInterface;
/**
* Serialize data to JSON, unserialize JSON encoded data
*
* @api
* @since 101.0.0
*/
class Json implements SerializerInterface
{
/**
* @inheritDoc
* @since 101.0.0
*/
public function serialize($data)
{
$result = json_encode($data);
if (false === $result) {
throw new \InvalidArgumentException("Unable to serialize value. Error: " . json_last_error_msg());
}
return $result;
}
/**
* @inheritDoc
* @since 101.0.0
*/
public function unserialize($string)
{
/* Added the following if clause 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;
}
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;
}
}Any other suggestions please?
Thank you
Andy
Can you try below shared article once:
https://meetanshi.com/blog/solved-unable-to-unserialize-value-in-magento-2-2/
Hi @Andy_Acute ,
if you used redis make sure check redis configuration your env.php in app/etc
You can re-config redis with commands below. This is recommended from magento
bin/magento setup:config:set --session-save=redis --session-save-redis-host=redis --cache-backend-redis-db=0
bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-server=redis --cache-backend-redis-db=1
try clear cache and flush redis
Hope this helps you!
Problem Solved! Click Kudos & Accept as Solution!
Hi Manish
This is the code I have in my Json.php file!!
Please look at my OP
Andy
It seems okay as suggested solution, still are you facing same?