首页 文章

php json_encode

提问于
浏览
2

我有一个symfony应用程序,使用 json_encodejson_decode 来记录一些价格 . 问题是 json_decode 在一个文件中正常工作(我可以解码存储在我的PSQL数据库中的字符串),但是当我从其他文件中调用它时 json_decode 返回null,我've check the file encodings (all are utf-8) the tables and database encoding(utf-8 too). So I don'知道问题出在哪里,也试过 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","precios":{"1":{"precio":"20000","abreviatura":"CLP"}},"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","precios":{"1":{"precio":"20000","abreviatura":"CLP"}},"fechaRetiro":"31-05-2011"}}}}

但是当我调用$ json-> decode()时,我得到了Array()

5 回答

  • 0

    好的人,先谢谢大家的帮助 .

    我得到了解决方案,这完全归功于Zend Json库 .

    Symfony使用转义策略来防止XSS攻击,SQL注入攻击等 . 所以在我的情况下发生了什么,当我调用json_encode和json_decode时,它是在Doctrine生成的对象内部来表示我的对象(在这种情况下是一个预留),所以因为它是对行数据(valoresOfertor)的本地调用,所以数据库中的数据没有被转义,因此方法工作正常 .

    但是,当我试图对保留类之外的行的值进行编码和解码时,Symfony使用了它的转义策略,所以

    "
    

    成为

    &quot
    

    所以,尝试不同的JSON库,我使用了Zend one,并看到了显示的异常(语法错误:

    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","precios":{"1":{"precio":"20000","abreviatura":"CLP"}},"fechaRetiro":"31-05-2011"}}}}')
    in SF_ROOT_DIR/apps/saas/modules/editreserva/templates/habitacionesSuccess.php line 20 ...
    

    那么我添加了以下行:

    htmlspecialchars_decode($jsonVariable);
    

    它奏效了 .

    如果他用symfony和json进行相同的实验,我希望它对某人有所帮助 .

  • 0

    据我所知,在以前版本的PHP中,json_encode()和json_encode()中存在一个或多个错误 . 您可以尝试将PHP更新到最新版本,也可以使用外部库对JSON进行编码和解码 . 有一些,但我认为PEAR JSON是最好的 .

  • 0

    它可能是UTF-8 BOM . 尝试使用没有BOM编码的UTF . 还要回显json_last_error()以查看问题所在 .

    EDIT:

    IS是一个有效的JSON

  • 2

    php.net:如果无法解码json或编码数据深于递归限制,则返回 NULL .
    因此,要么将e递归限制设置为低于数据深度(如果你说它在另一个页面上工作,则可能看起来似乎不是这样),或者json无法解码 .
    如果它在一个页面上工作而在另一个页面上不起作用,请检查文件编码 .
    第一页可能被编码为utf-8(json的编码),但第二页可能是其他东西(如ascii) . 检查bom也 . 你可能需要将页面编码为utf-8而不用bom .

  • 0

    如果它是您正在处理它的模板,请查看:

    $sf_data->getRaw();
    

    http://www.geeganage.com/symfony-json-made-easy/

相关问题