2012-09-27 42 views
3

所以我們在我們的Symfony2項目中使用JMSSerializerBundle爲我們的客戶生成一些JSON。它序列化我們的Doctrine2實體並且像魅力一樣工作,只有一個例外。所有雙/十進制值都是生成的JSON中的字符串,這使客戶端感到困惑。JMSSerializerBundle在JSON中返回雙精度字符串

我們的序列化實體看起來像這樣,我只在這裏粘貼了相關屬性/ getters。

class Offer 
{ 
    [...] 

    /** 
    * @var double $latitude 
    * 
    * @ORM\Column(name="latitude", type="decimal", precision=10, scale=7) 
    * @Groups("offerlist") 
    */ 
    private $latitude; 

    /** 
    * @var double $longitude 
    * 
    * @ORM\Column(name="longitude", type="decimal", precision=10, scale=7) 
    * @Groups("offerlist") 
    */ 
    private $longitude; 

    [...] 

    /** 
    * Get latitude 
    * 
    * @return double 
    */ 
    public function getLatitude() 
    { 
     return $this->latitude; 
    } 

    /** 
    * Get longitude 
    * 
    * @return double 
    */ 
    public function getLongitude() 
    { 
     return $this->longitude; 
    } 

    [...] 
} 

緯度/經度值在JSON像這樣顯示:

{ 
    "latitude" : "5.3452", 
    "longitude" : "54.2312" 
} 

如何擺脫引號的,所以它在JSON一些,而不是一個字符串?這應該很容易,但我找不到docs或網上關於此問題的任何內容。希望有人能幫我一把!

回答

5

您的緯度和經度列使用Doctrine的十進制類型,它表示爲一個字符串。

你可以使用學說的double類型如果可以的話:

/** 
* ... 
* @ORM\Column(name="latitude", type="double") 
*/ 
private $latitude; 

或使用JMSSerializerBundle的@Type annotation

/** 
* ... 
* @Serializer\Type("double") 
*/ 
private $latitude; 
+1

也許你能幫助我在一個類似的問題;) 我已經設定的類型(「雙」)annoataion,但我不能找到一個解決方案讓序列化程序向這些值添加尾隨零。 我想註釋的字段返回100.00而不是100,但找不到一個合適的地方 – weyandch

+0

100 === 100.00如果它是一個數字,像這些東西不支持,除非你將序列化值爲一個字符串。我真的無法想象需要發送零點的情況。如果它的意義重大,你可以用一個單獨的值發送它。我認爲許多數據庫和編程語言也會忽略.00,所以即使你將它串行化,它在反序列化中可能會丟失。 –

0

,因爲你可能具有畸形的表現,不要使用「雙」爲柱式該座標。更好地施展你的屬性:

 /** 
 
    * Get latitude 
 
    * 
 
    * @return double 
 
    */ 
 
    public function getLatitude() 
 
    { 
 
     return (double)$this->latitude; 
 
    }