2014-08-27 27 views
0

我正在使用Jackson創建json對象,然後將它們返回給客戶端,無論是使用ajax還是作爲Html dom中的屬性值。JsonGenerator:不需要的雙引號

這是我創造我的JSON字符串:

public void    serialize(Customer comp, JsonGenerator gen) 
{ 
    gen.writeStartObject(); 
    gen.writeObjectField("idCustomer", comp.idCustomer); 
    gen.writeObjectField("name", "\"" + comp.infos.nameCompany + "\""); 
    gen.writeEndObject(); 
} 

的問題是,它閹在HTML或AJAX使用此功能的結果是不同的。它看起來像一次,傑克遜檢測comp.infos.name公司作爲一個字符串,其他人,它不。 阿賈克斯版本:

"customer": {"idCustomer": 1,"name": "cu1"} 

當此JSON字符串是HTML:

"customer": {"idCustomer": 1,"name": "\"cu1\""} 

注意不必要的\」在HTML版本

爲什麼這種差異,以及如何避免它? 謝謝。

編輯: @Salem

這是我在html中實現json的代碼。這是一個玩framowork模板代碼:

<div content="@structure.getContent"> 
</div> 
+0

請添加您在html頁面中打印該值的代碼部分。 – Salem 2014-08-27 21:34:23

+0

@Salem我做到了。 – Moebius 2014-08-28 09:01:54

+0

嘗試使用'@Html(structure.getContent)'而不是 – Salem 2014-08-28 09:42:37

回答

0

解決方法是使用writeStringField方法代替writeObjectField:

public class JsonCustomerSerializer extends JsonSerializer<Customer> 
{ 
    @Override 
    public void serialize(Customer comp, JsonGenerator gen, SerializerProvider provider)throws IOException, JsonProcessingException 
    { 
     gen.writeStartObject(); 
     gen.writeObjectField("idCustomer", comp.idCustomer); 
     gen.writeStringField("name", comp.infos.nameCompany); 
     gen.writeEndObject(); 
    } 
} 
0

完全刪除"\"",看看會發生什麼。如果我記得正確地做這件事,它應該如你所願。如果comp.infos.nameCompany的值是字符串類型,則應自動添加引號

+0

我回答了你:http://stackoverflow.com/a/25529581/2482582 – Moebius 2014-08-27 14:18:38

0

@Lucas 感謝您的幫助,但comp.infos.nameCompany是一個字符串。

如果我刪除+ 「\」」,HTML版本是正確的:

"customer": {"idCustomer": 1,"name": "cu1"} 

但現在的AJAX版本是:

"customer": {"idCustomer": 1,"name": cu1} 

它甚至不是一個正確的JSON 無論我在html版本中有多一個雙引號,

+0

或者試着用''''替換''''''(單引號)(如果單引號適合你)如果不是' m out of ideas。 – Lucas 2014-08-27 15:23:39

+0

@Lucas使用單引號不是解決方案。 – Moebius 2014-08-28 07:34:23