【问题标题】:Jackson field value with no quotation marks不带引号的 Jackson 字段值
【发布时间】:2013-08-10 17:17:12
【问题描述】:

是否有注释或其他方式告诉杰克逊序列化不带引号的字符串变量的值。序列化程序应该只序列化不带引号的一个字段的值。

我正在寻找类似以下内容的退货:

{"name": "nameValue", "click" : function (e){console.log("message");}}

而不是

{"name": "nameValue", "click" : "function (e){console.log("message");}"}

以上是外部 java 脚本库需要数据的方式,所以如果没有办法,我将不得不在对象映射器将字符串转换为 JSON 后手动更改字符串。

【问题讨论】:

    标签: java json annotations jackson


    【解决方案1】:

    正如其他人所指出的,双引号在 JSON 中不是可选的,而是强制性的。

    话虽如此,你可以使用注解JsonRawValue 来做你想做的事。

    public class POJO {
      public String name;
      @JsonRawValue
      public String click;
    }
    

    【讨论】:

      【解决方案2】:

      嗯,从技术上讲,你可以做到。虽然结果不是有效的 JSON,但 Jackson 仍然可以:

      class Dto  {
          @JsonProperty("name")
          String foo = "nameValue";
          @JsonProperty("click")
          JsEntry entry = new JsEntry("function (e){console.log(\"message\");}");
      }
      
      class JsEntry implements JsonSerializableWithType {
          private String value;
      
          JsEntry(String value) {
              this.value = value;
          }
      
          @Override
          public void serializeWithType(JsonGenerator jgen, SerializerProvider provider, TypeSerializer typeSer) throws IOException {
              this.serialize(jgen, provider);
          }
      
          @Override
          public void serialize(JsonGenerator jgen, SerializerProvider provider) throws IOException {
              jgen.writeRawValue(value);
          }
      }
      

      不过,我完全同意此要求会导致违反标准,应予以修订。

      【讨论】:

        【解决方案3】:

        那是not valid JSON,所以你不能拥有它。 JSON是一种值传递格式,所以不能传递函数。

        如果你真的需要以 JSON 格式返回函数,你可以在 javascript 中对结果进行后处理。

        【讨论】:

        • 我知道它的 JSON 无效。但这是要求。
        • 有人设计了一个不好的要求 :) 你能在结果从服务器返回后用 javascript 进行后处理吗?
        • 这不是一个坏主意。
        猜你喜欢
        • 2022-12-19
        • 1970-01-01
        • 1970-01-01
        • 2015-07-06
        • 2018-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多