JsonGenerator:不需要的双引号

时间:2014-08-27 13:51:56

标签: java html json playframework jackson

我使用Jackson创建json对象,然后将它们返回给客户端,无论是使用ajax还是作为Html dom中的属性值。

这就是我创建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.nameCompany是一个字符串,而其他人,它并没有。 ajax版本:

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

当这个json字符串在html中时:

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

注意不需要的\"在html版本中。

为什么这种差异以及如何避免呢? 感谢。

编辑: @Salem

这是我在html中实现json的代码。这是一个玩framowork模板代码:

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

3 个答案:

答案 0 :(得分:0)

完全删除"\"",看看会发生什么。如果我记得这样做,它应该按你的意愿工作。如果comp.infos.nameCompany的值是String类型,则应自动添加引号

答案 1 :(得分:0)

@Lucas 感谢您的帮助,但comp.infos.nameCompany是一个字符串。

如果我删除+“\”“,则html版本是正确的:

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

但现在ajax版本是:

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

它甚至不是正确的json。 无论我在html版本中还有一个双引号。

答案 2 :(得分: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();
    }
}