【问题标题】:Remove double quotes from JSON String从 JSON 字符串中删除双引号
【发布时间】:2019-03-06 05:31:19
【问题描述】:

我有以下 JSON 字符串:

{ "students" : "[  {\"studentId\" : \"A1\",\"studentNumber\" 
 : \"287\",\"studentType\" : \"FullTime\"} ]"  }

为了在 java 对象中反序列化这个字符串,我必须删除 \,这可以使用字符串替换方法来完成。除此之外,[] 之前和之后也有双引号。如何在使用 Jackson 反序列化时删除这些双引号或允许它们。

【问题讨论】:

标签: java json jackson


【解决方案1】:

您不必自己动手,jackson 会搞定的。创建一个 pojo 类 Student,您可以编写如下内容:

ObjectMapper mapper = new ObjectMapper();
Student student = mapper.readValue(responseBody, Student.class);

【讨论】:

  • 我做了同样的事情,但由于额外的 \ 和 [ 之前和之后的引号 ] 它给出了错误。我使用替换方法删除了 \ 但无法删除 [ 之前和之后的引号。
  • 下面的字符串适用于我的代码: { "students" : [ {"studentId" : "A1","studentNumber" : "287","studentType" : "FullTime"} ] }
【解决方案2】:

尝试将"[ 替换为[,将]" 替换为]

json = json.replaceAll("\"\\[","[");
json = json.replaceAll("\\]\"", "]");

【讨论】:

  • 这工作正常。只有一个问题..为什么我们要在 [ 和 ] 之前添加 \\。
  • 这是一个 hack,很可能会在不平凡的情况下破坏。我怀疑如果学生对象中的任何内容包含 json 转义字符(例如引号",将被双重转义)或"["],反序列化数据将是错误的。
【解决方案3】:

ObjectMapper 一样,我们也可以将Gson 用于相同目的。

Gson gson = new Gson();
gson.fromJson(responseBody, Student.class);

【讨论】:

    【解决方案4】:
    public class StringTypeSerializationAdapter extends TypeAdapter<String> {
    
    
    public String read(JsonReader reader) {
        throw new UnsupportedOperationException();
    }
    
    public void write(JsonWriter writer, String value) throws IOException {
        if (value == null) {
            writer.nullValue();
            return;
        }
        writer.jsonValue(value);
    }
    

    }

    以上使用 GSON 字符串适配器从字符串中删除引号

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 2013-10-09
      • 2012-09-26
      相关资源
      最近更新 更多