提问者:小点点

json_decode生成字符串而不是对象


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

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

匿名用户

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

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

但最好首先识别并修复导致存储无效数据表单的bug。