json_decode生成字符串而不是对象

时间:2020-06-20 12:55:05

标签: php json

我需要从数据库中获取一个JSON对象,将其转换为php对象,并指定key => value对。

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 个答案:

答案 0 :(得分:2)

您拥有的不是JSON,而是HTML编码的JSON。您可以使用html_entity_decode()恢复原始数据:

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

但是最好找出并修复导致无效数据形式首先存储的错误。