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

我如何用Jackson解析Color java类到JSON?

沈宏朗
2023-03-14
File act = new File(new File().getAbsolutePath());

ObjectMapper om = new ObjectMapper();
File f = new File(act, "123.JSON");

om.writeValue(f, new person());
person per = om.readValue(f, person.class);
System.out.println(per);

这是我的个人类:

public class person implements Serializable {
    //it include getters, setters and builder

   String nombe = "Pepe";
   String CI = "12345678978";
   Color c = Color.red;
}

共有1个答案

羊舌旭尧
2023-03-14

java.awt.color类不是常规的POJOenum。如果要以JSON格式存储序列化程序和反序列化程序,则需要实现自定义序列化程序和反序列化程序。Color类可以用其RGB表示形式表示,并且可以将其存储为一个数字:

class ColorJsonSerializer extends JsonSerializer<Color> {

    @Override
    public void serialize(Color value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        if (value == null) {
            gen.writeNull();
            return;
        }
        gen.writeNumber(value.getRGB());
    }
}

class ColorJsonDeserializer extends JsonDeserializer<Color> {

    @Override
    public Color deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        return new Color(p.getValueAsInt());
    }
}

简单用法:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;

import java.awt.*;
import java.io.IOException;

public class JsonPathApp {

    public static void main(String[] args) throws Exception {
        SimpleModule awtModule = new SimpleModule("AWT Module");
        awtModule.addSerializer(Color.class, new ColorJsonSerializer());
        awtModule.addDeserializer(Color.class, new ColorJsonDeserializer());

        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(awtModule);

        String json = mapper.writeValueAsString(new Person());
        System.out.println(json);

        System.out.println(mapper.readValue(json, Person.class));
    }
}

上面的代码打印:

{"nombe":"Pepe","c":-65536,"ci":"12345678978"}
Person{nombe='Pepe', CI='12345678978', c=java.awt.Color[r=255,g=0,b=0]}
    null
 类似资料:
  • 我在通过邮递员传递json数据时遇到问题。如果Mandetory日期带有注释,没问题。另一个日期接受null。但是在更新时,该日期会产生问题。我使用Java1.8与Spring启动 以下链接我已经访问过,但不适合这个。杰克逊JSON解析错误的LocalDateTime解析:无法构造java.time.LocalDate的实例:没有String参数构造函数/工厂方法从String值反序列化https

  • 我有一个任务解析Json到Java类。 我试图解析的Json片段有点像树结构。 这里的关键点是,参数值可以是字符串,也可以是参数名称/值对的另一个数组; 我想用杰克逊地图绘制器 这里的问题是我不知道如何在这里描述响应类,所以它可以被杰克逊自动解析。如果有可能的话。 Json:

  • 我正在尝试将旧的EJB服务(其中的逻辑)包装在一个微服务中。我使用Quarkus/RESTEasy实现此微服务 但是,我在自定义序列化/反序列化时遇到问题。 问题:,这让我相信Jackson并不认为Geometry是要解析为String的类。这让我相信对象映射器没有被拾取。。 注1:我可以在Quarkus日志中提供的日志语句中看到: 注2:单元测试在上运行良好。 这是我要解析的JSON(注:几何是

  • 问题内容: 我试图简化我的代码:我想存储键和值(所有字符串)。 我实际上是使用A 来存储它。hat方法可以是值()或新节点()。 如何简化此代码?递归函数会很好。 问题答案: 假设您的最终目标只是将JSON反序列化为,那么使用Jackson可以简单得多。使用: 您将需要错误处理等,但这是一个很好的起点。

  • 您好,我不熟悉JSON学习,并尝试将上述JSON解析为POJO对象。”https://api.apis.guru/v2/list.json“。我无法理解如何存储不同的主机名”1 Forge。com”,“1密码。local:connect“作为java类中的一个字段。上面的任何帮助都会对我很有帮助

  • 我在MongoDB集合中有以下文档,我希望将该文档映射回Kotlin对象。 我编写了一个自定义的反序列化器来读取UUID的二进制值,但它失败了。如有任何帮助,我们将不胜感激。 主应用程序。 序列化程序和反序列化程序:

  • 我有一些json数据,看起来像 解析器被“无法构造值的实例(不存在创建者,如默认构造)”所阻塞:没有双精度/双参数构造函数/工厂方法从数字值反序列化(1.572553780732E9)” 我的数据类看起来像: