标签: objectmapper

将 json 转换为对象列表

我有以下字符串:

String json = "[{\"id\": \"0\", \"ip\": \"123\", \"mac\": \"456\"}, {\"id\": \"1\", \"ip\": \"111\", \"mac\": \"222\"}]";
Run Code Online (Sandbox Code Playgroud)

还有一个 SlaveEntity 实体,它具有:

public class SlaveEntity extends BaseEntity {

    private String ip;
    private String macAddress;
    private String status;

    @OneToMany(mappedBy="slave", targetEntity = PositionEntity.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<PositionEntity> positions;

}
Run Code Online (Sandbox Code Playgroud)

我正在编写一个接受 json 并返回一个 SlaveEntity 列表的方法:

public static List<SlaveEntity> JsonToSlaveEntity(String json) {
        ObjectMapper objectMapper = new ObjectMapper();
        List<SlaveEntity> obj = new ArrayList<SlaveEntity>();

        try {
           obj = objectMapper.readValue(json, List.class);

        } catch (IOException e) { …
Run Code Online (Sandbox Code Playgroud)

java spring objectmapper

4
推荐指数
1
解决办法
2万
查看次数

Jackson - 迭代数组并操作其值

我有这个json文件:

{
  "gateway_name": "gateway1",
  "fields": [
    {"name":"Code", "value":""},
    {"name":"PaymentId", "value":""},
    {"name":"RefNo", "value":""}
  ]
}
Run Code Online (Sandbox Code Playgroud)

我试图用Jackson对象映射器解析这个文件并遍历fields数组。我想要实现的是当name等于时RefNo,操纵valueto 1112,所以它会变成:

{
  "gateway_name": "gateway1",
  "fields": [
    {"name":"Code", "value":""},
    {"name":"PaymentId", "value":""},
    {"name":"RefNo", "value":"1112"}
  ]
}
Run Code Online (Sandbox Code Playgroud)

我如何检查field值并将其设置value1112

到目前为止我尝试的是:

  Resource resource = new ClassPathResource("gateway-fields.json");  //read from json file
  JsonFactory jsonFactory = new JsonFactory();
  ObjectMapper objectMapper = new ObjectMapper(jsonFactory);

  JsonNode arrayNode = objectMapper.readTree(resource.getFile()).get("fields");

  if (arrayNode.isArray()) {
      for (JsonNode jsonNode : arrayNode) { …
Run Code Online (Sandbox Code Playgroud)

java jackson objectmapper

4
推荐指数
1
解决办法
1万
查看次数

与 Spring Data jpa 的自引用关系

我正在使用 Spring Boot 构建一个应用程序,并且必须设置自引用关系。

为了使场景简单易懂,我尝试使用部门实体示例来处理类似的场景。

以下是我需要设置自引用关系的场景

  1. 创建的部门具有以下属性 - 名称、成本中心、位置。
  2. 部门可以与也是部门类型的父部门相关
  3. 一个部门可以有子部门(子部门),这些子部门也是部门类型。

为了设置这样的场景,我按以下方式定义了实体部门。

部门.java

public class Department {

    @Id
    @GenericGenerator(name = "sequence_department_id", strategy = "com.app.mycompany.AgileCenterServices.util.DepartmentIdGenerator")
    @GeneratedValue(generator = "sequence_department_id")
    @Column(unique = true)
    private String id;

    private String name;

    private String location;

    private String costCenter;

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="parentDepartment")
    private Department parentDepartment;

    @OneToMany(mappedBy="parentDepartment")
    private Set<Department> linkedDepartments = new HashSet<Department>();

    /* getters & setters */

}
Run Code Online (Sandbox Code Playgroud)

DepartmentController.java

@CrossOrigin
    @RequestMapping(value = "/", method = RequestMethod.POST)
    public Department createDepartment(@RequestBody String trial) throws Exception {

        logger.info("Inside createDepartment() API "); …
Run Code Online (Sandbox Code Playgroud)

json self-reference spring-data-jpa spring-boot objectmapper

4
推荐指数
1
解决办法
1万
查看次数

Jackson 从字符串/纯数字格式解析 Double

我有一个文件,可以说是这样的,它是装箱为本机类型或字符串的双值。

   { "field1" : 123.00 }
Run Code Online (Sandbox Code Playgroud)

或者

{"field1" : "123.00" }
Run Code Online (Sandbox Code Playgroud)

和相应的 Pojo:

    class Response{
          Double field1;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果它是字符串格式,我会看到一个错误,如下所示:

Caused by: java.lang.NoSuchFieldError: USE_FAST_DOUBLE_PARSER
    at com.fasterxml.jackson.databind.deser.std.NumberDeserializers$DoubleDeserializer._parseDouble(NumberDeserializers.java:755)
    at com.fasterxml.jackson.databind.deser.std.NumberDeserializers$DoubleDeserializer.deserialize(NumberDeserializers.java:684)
Run Code Online (Sandbox Code Playgroud)

显然,同样的事情适用于 Int 或 long 对于字符串或纯数字。为什么 Double 会失败?

是否有任何注释可以使其适用于两种格式?或者解决从字符串解析的问题?

或者,它可以使用@Jsonsetter。

谢谢

java jackson spring-boot objectmapper jackson-databind

4
推荐指数
1
解决办法
3253
查看次数

使用Alamofire和Objectmapper,整数值始终为零

我正在使用Alamofire和ObjectMapper,我的模型类就是这样

class Category: Object, Mappable {

dynamic var id: Int = 0
dynamic var name = ""
dynamic var thumbnail = ""
var children = List<Category>()


override static func primaryKey() -> String? {
    return "id"
}


required convenience init?(_ map: Map) {
    self.init()
}

func mapping(map: Map) {
    id <- map["id"]
    name <- map["name"]
    thumbnail <- map["thumbnail"]
    children <- map["children"]
}
Run Code Online (Sandbox Code Playgroud)

}

而我正在使用这样的Alamofire

 Alamofire.request(.GET, url).responseArray { (response: Response<[Category], NSError>) in

        let categories = response.result.value

        if let categories = categories { …
Run Code Online (Sandbox Code Playgroud)

swift alamofire objectmapper

3
推荐指数
1
解决办法
2609
查看次数

在 Swift 中使用 &lt;-

我正在查看ObjectMapper库。并注意到了<-接线员。

这究竟是如何运作的?

// Mappable
func mapping(map: Map) {
    username    <- map["username"]
    age         <- map["age"]
    weight      <- map["weight"]
    array       <- map["arr"]
    dictionary  <- map["dict"]
    bestFriend  <- map["best_friend"]
    friends     <- map["friends"]
    birthday    <- (map["birthday"], DateTransform())
}
Run Code Online (Sandbox Code Playgroud)

另外下面的行是如何工作的

birthday    <- (map["birthday"], DateTransform())
Run Code Online (Sandbox Code Playgroud)

我知道birthday现在是一个元组。可以通过以下方式访问

self.birthday.0
self.birthday.1
Run Code Online (Sandbox Code Playgroud)

虽然属性是这样定义的

var birthday: NSDate?
Run Code Online (Sandbox Code Playgroud)

元组如何响应 a NSDate(在本例中)?

谢谢!

swift objectmapper

3
推荐指数
1
解决办法
1778
查看次数

将JSON映射到我的模型数组 - ObjectMapper

我在使用ObjectMapper将json映射到我的对象数组时遇到了麻烦.这是我的模型对象.

class Participant : Mappable {

var user_global_id: String!
var user_app_id: String!

init(){
}

required init?(_ map: Map) {
}

// Mappable
func mapping(map: Map) {
    user_global_id    <- map["user_global_id"]
    user_app_id    <- map["user_app_id"]
}
}
Run Code Online (Sandbox Code Playgroud)

而我的json看起来: "[{\"user_global_id\":5093363330056192,\"user_app_id\":11}]"

我在调用ObjectMapper:

let participants = Mapper<[Participant]>().map(json["registeredParticipants"])
Run Code Online (Sandbox Code Playgroud)

上面的行给出错误: Type '[Participant]' does not conform to protocol 'Mappable'

json swift objectmapper

3
推荐指数
1
解决办法
2819
查看次数

在Custom serializer jackson中配置objectmapper?

我有一个CustomSerializer用于编写特定字段.我呼吁的自定义序列化ObjectMapper与像某些配置WRAP_ROOT_VALUE,PropertyNameStrategy,Inclusion.NON_NULL.

现在在我的自定义序列化程序中,除了one(WRAP_ROOT_VALUE)之外,我在序列化自定义类时需要所有这些属性.

public class CustomSerializer extends JsonSerializer<Object>{

    @Override
    public void serialize(Object obj, JsonGenerator jgen,
            SerializerProvider arg2) throws IOException,
            JsonProcessingException {
//.......
        jgen.writeObject(obj);
//...       
    }
Run Code Online (Sandbox Code Playgroud)

所以我的obj这里被序列化了root值包装,我不想要.

我出于某种原因无法编辑我的POJO.

如何禁用ObjectmapperCustomSerializer中的单个(或某些)属性???

java serialization json jackson objectmapper

3
推荐指数
1
解决办法
877
查看次数

无法在Spring Boot中将ProblemHandler设置为ObjectMapper

我试图使用Jackson2ObjectMapperBuilderCustomizer将自定义问题处理程序添加到对象映射器:

@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer() {
    return new Jackson2ObjectMapperBuilderCustomizer() {
        @Override
        public void customize(Jackson2ObjectMapperBuilder builder) {
            ObjectMapper m = builder.build();
            m.addHandler(
                    new DeserializationProblemHandler() {
                        @Override
                        public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser p, JsonDeserializer<?> deserializer, Object beanOrClass, String propertyName) throws IOException {
                            System.out.println("ahahahaa");
                            return super.handleUnknownProperty(ctxt, p, deserializer, beanOrClass, propertyName);
                        }
                    }
            );
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

但是当我自动装配ObjectMapper bean时,_problemHandlers属性为null。

我也尝试过使用以下命令自定义现有的ObjectMapper:

@Autowired
public customize(ObjectMapper mapper) {
...
}
Run Code Online (Sandbox Code Playgroud)

但是结果是一样的。我不知道谁可以删除此属性。我根本不会在另一个地方初始化对象映射器的其他构建器/工厂/等。我做错了什么?

java spring jackson objectmapper jackson-databind

3
推荐指数
1
解决办法
388
查看次数

LocalDateTime 以数组格式表示

我在 Java 8 中使用 spring boot 2.2.6 和 Jackson 2.10.3。我在整个项目中使用 localdatetime 对象。Jackson 无法正确解析 LocalDateTime(或者可能是默认格式)并以如下数组格式在 json 响应中发送日期

        "createdDate": [
            2020,
            8,
            31,
            0,
            0,
            0,
            80000000
        ]
Run Code Online (Sandbox Code Playgroud)

Spring Boot中的JSON Java 8 LocalDateTime 格式所述,Spring Boot 2 已经在类路径上默认设置了 jackson-datatype-jsr310:2.10.3。我希望日期在整个项目中以 json 表示为 2020-03-31:00。第一个解决方案在上面的链接中不起作用。在那之后,我尝试了 @JsonSerialize 注释并且它有效,但我不想应用于每个类。所以也试图覆盖对象映射器但它没有用

@Primary
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
        SimpleModule module = new SimpleModule("my custom date serializer");
        module.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer());
        mapper.registerModule(module);
        return mapper;
    }
Run Code Online (Sandbox Code Playgroud)

还尝试自定义 Jackson2ObjectMapperBuilder,但仍然有数组格式的日期

@Bean
    public Jackson2ObjectMapperBuilder …
Run Code Online (Sandbox Code Playgroud)

java spring-boot objectmapper jackson2

3
推荐指数
1
解决办法
709
查看次数