将json编码的String转换为FosRestBundle中的json对象

时间:2014-07-17 15:52:47

标签: symfony fosrestbundle jmsserializerbundle

我的一个数据库字段中有一个json编码的字符串,例如

[{ “名称”: “汽车”, “价格”: “10”}]

我正在使用FosRestBundle以json格式返回DB-Values并返回上面的字符串 - 作为字符串 - 在此之前没什么特别的;)

如何转换此String,以便返回Json对象?

2 个答案:

答案 0 :(得分:0)

您可以使用json_decode将此字符串解码为stdClass或关联数组。这是你在找什么?

编辑:这应该有用

public function myAction()
{
    // do stuff
    $string = '[{"name":"car","price":"10"}]';
    $array = json_decode($string, true);

    /* array is like
    [
      0 => [
        'name' => string(3) "car"
        'price' => string(2) "10"
      ]
    ]
    */

    return $array;
}

答案 1 :(得分:0)

最后我找到了解决方案。

我的实体包含:

/**
 * @var string
 *
 * @ORM\Column(name="options", type="string", nullable=true)
 */
private $options;

"选择"包含json编码的字符串。所以我用JMS Serilizer Annotation @Accessor尝试了它并编写了这个特定的getter:

/**
 * Get optionsAsArray
 *
 * @return array
 */
public function getOptionsAsArray()
{
    return (array)json_decode($this->options, true);
}

仍然出现错误"数组到字符串转换"。所以解决方案是,添加另一个注释@type并且JMSSerializer返回格式良好的JSON。

这就是实体的样子:

use JMS\Serializer\Annotation\Accessor;
use JMS\Serializer\Annotation\Type;


/* ... */

/**
 * @var string
 *
 * @ORM\Column(name="options", type="string", nullable=true)
 * @Accessor(getter="getOptionsAsArray")
 * @Type("array")
 */
private $options;