我需要从数据库中获取一个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对象,在这种情况下我的问题在哪里? 如果我理解正确的话,输出是一个字符串,因为既然它存储在文本字段中,那么它已经是一个字符串了。 如果是这样,是可以这样处理,还是不可以呢? 谢了。
您所拥有的不是JSON,而是HTML编码的JSON。 您可以使用html_entity_decode()恢复原始数据:
$html = '[{"7":3.5,"19":19,"20":20}]';
$json = html_entity_decode($html);
echo $json;
但最好首先识别并修复导致存储无效数据表单的bug。