php json_encode

问题描述

| 我有一个symfony应用程序,它使用
json_encode
json_decode
记录一些价格。 问题是
json_decode
一个文件中可以正常工作(我可以解码存储在Psql数据库中的字符串),但是当我从其他文件调用call1 call返回null时,我已经检查了文件编码(所有均为utf-8)表和数据库编码(也是utf-8)。所以我不知道问题出在哪里,也尝试了
utf8_encode()
... 任何帮助将不胜感激。 谢谢。 这是有效的编码json(这是由PHP json_encode编码的数组)
{\"1\":{\"1\":{\"fechaInicio\":\"30-05-2011\",\"precios\":{\"1\":{\"precio\":\"20000\",\"abreviatura\":\"CLP\"}},\"fechaRetiro\":\"31-05-2011\"}},\"2\":{\"2\":{\"fechaInicio\":\"30-05-2011\",\"fechaRetiro\":\"31-05-2011\"}}}
数组:
$preciosOfertor = Array ( [unidades] => Array ( [1] => Array ( [1] => Array ( [fechaInicio] => 30-05-2011 [precios] => Array ( [1] => Array ( [precio] => 20000 [abreviatura] => CLP ) ) [fechaRetiro] => 31-05-2011 ) ) [2] => Array ( [2] => Array ( [fechaInicio] => 30-05-2011 [precios] => Array ( [1] => Array ( [precio] => 20000 [abreviatura] => CLP ) ) [fechaRetiro] => 31-05-2011 ) ) ) ) 
要编码它,我使用:
$preciosOfertor = json_encode($preciosOfertor); 
然后我打电话
$precios = json_decode($databaSEObject->getPreciosOfertor(),true); 
当我在对数组进行编码的文件中使用json_decode时,它可以工作,但是当我在项目的其他文件中使用它时,我只能通过var_dump()获得NULL。 按照建议安装Services_JSON,但是现在我得到一个空数组 Services_JSON编码的json就是这样的:
{\"unidades\":{\"1\":{\"1\":{\"fechaInicio\":\"30-05-2011\",\"fechaRetiro\":\"31-05-2011\"}}}}
但是当我调用$ json-> decode()时,我得到了Array()     

解决方法

        好的,首先,谢谢大家的帮助。 我得到了解决方案,这一切都归功于Zend Json库。 Symfony使用转义策略来防止XSS攻击,SQL Injection攻击等。因此,在我的情况下,当我调用json_encode和json_decode时,它位于Doctrine生成的对象内部以表示我的对象(在本例中为保留),因此因为这是对行数据(valoresOfertor)的本地调用,所以未转义数据库中的数据,因此方法运行良好。 但是,当我尝试对保留类外部的行的值进行编码和解码时,Symfony使用了它的转义策略,因此
\"
成为
&quot
因此,尝试使用不同的JSON库,我使用了Zend一个库,并看到了所显示的异常(语法错误:
    at Zend_Json::decode(\'{"unidades":{"1":{"1":{"fechaInicio":"30-05-2011","precios":{"1":{"precio":"20000","abreviatura":"CLP"}},"fechaRetiro":"31-05-2011"}},"2":{"2":{"fechaInicio":"30-05-2011","fechaRetiro":"31-05-2011"}}}}\')
in SF_ROOT_DIR/apps/saas/modules/editreserva/templates/habitacionesSuccess.php line 20 ...
因此,我添加了以下行:
htmlspecialchars_decode($jsonVariable);
而且有效。 我希望有人对symfony和json进行相同的实验能对他有所帮助。     ,        据我所知,在早期版本的PHP中,json_encode()和json_encode()中存在一个或多个错误。您可以尝试将PHP更新到最新版本,也可以使用外部库来编码和解码JSON。有一些,但是我认为PEAR JSON是最好的。     ,        它可能是存在的UTF-8 BOM。尝试使用没有BOM编码的UTF。还回显json_last_error()来查看问题所在。 编辑: 这是有效的JSON     ,        从php.net:如果无法解码json或编码数据深于递归限制,则返回NULL。 因此,您已将e递归限制设置为低于数据深度(如果您说它确实可以在另一页上工作,则似乎不是这种情况),或者无法解码json。 如果它在一页上有效,而在另一页上却没有,请检查文件编码。 第一页可能被编码为utf-8(json的编码),但是第二页可能是其他内容(例如ascii)。您可能还需要将页面编码为不带Bom的utf-8。     ,        如果您要处理的是模板,请查看:
$sf_data->getRaw();
http://www.geeganage.com/symfony-json-made-easy/