当前位置: 首页 > 知识库问答 >
问题:

Gson自定义反序列化,但只有一个字段[重复]

穆铭晨
2023-03-14

我收到的是API长json,例如:

{
  "field1": "val1",
  "field2": "val2",
  ...
  "SOME_FIELD": "   ABC   ",
  ...
  "fieldx": "valx"
}

我想用Gson反序列化它。一切正常,但字段的“SOME_FIELD”值总是带有烦人的空格。我想修剪()这个字段值(API不能更改)。我知道我可以使用JsonDeserializer,但我必须手动读取所有字段。是否可以在反序列化时只编辑一个感兴趣的字段,但对其余字段使用自动反序列化?

共有1个答案

邓禄
2023-03-14

在这里,我正在编写一个演示类,通过忽略嵌入在JSON中的一些未使用的属性将JSON转换为类。

在这里,我使用了ObjectMapper类将JSONObject反序列化为Object

 //configuration to enables us to ignore non-used Unknow Properties.
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

测试类(将Json转换为类对象的代码)。

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test {

    /**
     * @param args
     * @throws IOException 
     * @throws JsonProcessingException 
     * @throws JsonMappingException 
     * @throws JsonParseException 
     */
    public static void main(String[] args) throws JsonParseException, JsonMappingException, JsonProcessingException, IOException {
        Test o = new Test();
        o.GetJsonAsObject(o.putJson());

    }

//function to generate a json for demo Program.
    private String putJson() throws JsonProcessingException{
        HashMap<String, String> v_Obj = new HashMap<>();
        v_Obj.put("field1", "Vikrant");
        v_Obj.put("field2", "Kashyap");
        return new ObjectMapper().writeValueAsString(v_Obj); // change the HashMap as JSONString
    }

   //function to Convert a json Object in Class Object for demo Program.
    private void GetJsonAsObject(String value) throws JsonParseException, JsonMappingException, IOException{
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        Test1 obj = mapper.readValue(value, Test1.class);
        System.out.println(obj);
    }

}

Test1.java(转换POJO类)

class Test1{

    private String field1;

    public String getField1() {
        return field1;
    }

public void setField1(String field1) {
    this.field1 = field1;
}
public String toString(){
    return this.field1.toString();
}

}

正确阅读评论...希望你明白这个概念。

谢谢

 类似资料:
  • 问题内容: 确定,所以我编辑了问题,因为它不够清楚。 编辑2 :更新了JSON文件。 我在Android应用程序中使用GSON,我需要解析来自服务器的JSON文件,这些文件有点太复杂了。我不想让我的对象结构太沉重,所以我想简化内容: 所以我的对象的结构将不是JSON文件的结构。 例如,如果在JSON中,我有以下内容: 我不想保留我当前的对象结构,即一个对象,其中包含一个和一个“总计”。但是我只想将

  • 我有一个JestClient(elasticsearch)响应,我试图将其反序列化为一个对象。该对象包含两个DateTime字段,而在响应中,它们是字符串,因此我得到: 所以,我创建了一个自定义反序列化器来解决这个问题…然而,无论我做什么,我总是得到同样的错误。不知何故它没有注册使用它? 最后,我试图解析JestClient响应的代码: 无论我尝试什么,我总是得到上面的错误,我甚至不确定在这一点上

  • 有没有一种方法可以指定不同的序列化/反序列化JSON字段名,而不必显式地写出getter和setter方法,或许可以使用lombok getter和setter? 与此示例类似,下面的代码允许将传入的JSON反序列化为不同的POJO字段名。它还会使POJO字段名序列化为: 但这当然是不成立的。

  • 首先,我想说这是一个大学项目。 我有三节课<代码>订单抽象类和从订单继承的和类。 我使用Gson序列化/反序列化子类,但我遇到了一点问题。订单类有一个字段,gson使用该字段来确定订单类型,DineIn或Delivery。 序列化工作得很好。问题是,每当我尝试反序列化时,类型字段值都不会读取,并且总是设置为null,即使它存在于JSON文件中。当有很多字段时,就会发生这种情况,因为当我尝试在较小的

  • 问题内容: 我在使用Gson解析JSON响应时遇到问题。 JSON字串: 我有这两个课程: 但是当使用Gson解析这个时我有一个异常。我知道这是因为响应数组的第一个元素不是对象,而是整数。 所以问题是,我能以某种方式解决它吗? 问题答案: 您必须编写一个 自定义反序列化器 。我会做这样的事情: 首先,您需要包括一个新的类,而不是已有的两个类: 然后,您需要一个自定义解串器,类似于以下内容: 然后,

  • 我试图使用Gson自定义序列化将以下类序列化为Json。