【问题标题】:How to return JSON without Uniocde symbols using JsonModel in ZF2?如何在 ZF2 中使用 JsonModel 返回没有 Uniocde 符号的 JSON?
【发布时间】:2016-05-22 18:18:02
【问题描述】:

我有一个对象数组,我想将它作为 JSON 返回到客户端的浏览器。

将数组解析为JSON的代码如下:

public static function parse(array $data){

    $parsed = array();

    foreach ($data as $entity){
        $reflection = new \ReflectionClass($entity);
        $arrayObject = array();

        foreach($reflection->getProperties() as $property){
            $property->setAccessible(true);
            $arrayObject[$property->getName()] = $property->getValue($entity);
            $property->setAccessible(false);
        }

        array_push($parsed, $arrayObject);
    }

    $parsed = json_encode($parsed);


    return $parsed;
}

我正在使用这种静态方法,因为当比例不公开时,简单地将对象转换为数组会为我提供空字节键。到目前为止一切正常,我正在尝试使用 JsonModel 返回已解析的数组。

return new JsonModel(
    array(
        'data' => ObjectToJsonParser::parse($match)
    ));

在 Firebug 中,我收到了正确的 JSON 响应,但包含 Unicode 符号的内容是错误的。

如何在没有这些 Unicode 符号的情况下正确返回 JSON?

【问题讨论】:

    标签: php json unicode zend-framework2


    【解决方案1】:

    如果您正在编码 unicode 字符,则应在 parse 函数中调用 json_encode 时使用 JSON_UNESCAPED_UNICODE 选项。

    就像这样:

    $parsed = json_encode($parsed, JSON_UNESCAPED_UNICODE);
    

    您可以使用它来返回响应而不使用JsonModel

    return $this->getResponse()->setContent(ObjectToJsonParser::parse($match));
    

    【讨论】:

    • 我想提一下,我的 parse 函数正确返回数据(在没有 ZF2 JsonModel 的情况下测试。问题是 JsonModel 编码错误。
    • JsonModel 在使用该函数对数组进行编码后对其进行编码。尝试使用$this->getResponse()->setContent() 返回 Json。查看我的编辑。
    • 我按照你说的做了,另外将 content-type 设置为 application/json 就可以了。但我想知道是否有可能以某种方式配置返回的 JsonModel 正常工作?
    • @czeski JsonModel 无法转义 Unicode 字符。您可以创建自定义 MyJsonModel 扩展 JsonModel 类并覆盖 serialize() 方法,但我认为这不是一件好事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多