Не правильно выводит массив с данными через JSON?

Есть данные в текстовом файле, точней массив, такого вида:

[[0,\u0022\u042f \u0022],[0.2,\u0022\u043f\u0440\u043e\u0441\u0442\u043e \u0022]]

Вывожу JSON массив вот так:

$text=file_get_contents($filename);

echo json_encode($text, JSON_UNESCAPED_UNICODE);

И при получении этого массива есть ошибка. json_encode добавляет всем Unicode данным, которые в этом массиве, еще один символ \\, то есть вот так:

[[0,\\u0022\\u042f \\u0022],[0.2,\\u0022\\u043f\\u0440\\u043e\\u0441\\u0442\\u043e \\u0022]]

И при получении массива через JS - JSON.parse(), соответственно получается ошибка.

Может существует какой то обход этого добавления символа?


Ответы (1 шт):

Автор решения: Denis640Kb

Вы можете раскодировать строку и снова её передать.

$Arr = '[[0,\u0022\u042f \u0022],[0.2,\u0022\u043f\u0440\u043e\u0441\u0442\u043e \u0022]]';

$Arr = str_replace('\u0022', '"', $Arr);
function unicode_escape_decode($str) {
    return html_entity_decode(
        preg_replace('~\\\u([a-zA-Z0-9]{4})~', '&#x$1;', $str), null, 'UTF-8'
    );
}
$Arr = unicode_escape_decode($Arr);

$bz = json_encode($Arr);

echo $bz;
→ Ссылка