json_decode генерирует строку вместо объекта - PullRequest
0 голосов
/ 20 июня 2020

Мне нужно получить объект JSON из базы данных, преобразовать его в объект php и выполнить для каждой пары ключ => значение.

Объект JSON хранится с JSON .stringify (obj) в текстовом поле MySQL. Впоследствии я получаю данные с PDO, но у меня такая же непонятная проблема, как декодировать объект json в объект в php. Результатом всегда является строка .

$export = $data['document']->tax_rates;
$export = json_encode($export);
$export = json_decode($export);
var_dump($export);
echo($export)

// only test 
var_dump(json_decode($data['document']->tax_rates));
var_dump($data['document']->tax_rates)

$jsontest = json_decode('{"a":1,"b":2}');
var_dump($jsontest);

Результат:

string(42) "{"7":39729.69,"19":107.73}" // var_dump
{"7":39729.69,"19":107.73}  // echo

NULL // result of decode without encode before
string(42) "{"7":39729.69,"19":107.73}"  // var_dump raw data['document']

//test result as it should be
object(stdClass)#21 (2) {
  ["a"]=>
  int(1)
  ["b"]=>
  int(2)
}

Отладка Json выводит ошибку: JSON_ERROR_SYNTAX. Но это действительный объект JSON.

Как я могу создать здесь объект php и где моя проблема в этом случае? Если я правильно понимаю, вывод является строкой, потому что, поскольку он хранится в текстовом поле, это уже строка. Если это так, то можно ли так поступить или это невозможно? Спасибо.

1 Ответ

2 голосов
/ 20 июня 2020

У вас есть не JSON, а HTML -кодированный JSON. Вы можете восстановить исходные данные с помощью html_entity_decode () :

$html = '[{"7":3.5,"19":19,"20":20}]';
$json = html_entity_decode($html);
echo $json;

Но было бы лучше определить и исправить ошибку, из-за которой изначально сохраняется недопустимая форма данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...