GVKun编程网logo

使用Jackson将Java对象实例写入YAML(java jackson使用)

9

对于使用Jackson将Java对象实例写入YAML感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍javajackson使用,并为您提供关于Jackson通过反射将Json转化为java对象、

对于使用Jackson将Java对象实例写入YAML感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍java jackson使用,并为您提供关于Jackson通过反射将Json转化为java对象、Jackson:使用jackson将json字符串响应转换为pojo转换时过滤空值或空值、java - 在java中使用snakeyaml写入yaml时,我可以只删除大括号吗、java-使用jackson将json字符串映射到对象将抛出MismatchedInputException的有用信息。

本文目录一览:

使用Jackson将Java对象实例写入YAML(java jackson使用)

使用Jackson将Java对象实例写入YAML(java jackson使用)

我有一个“ Example” Pojo类,如下所述。可以使用杰克逊的任何电话来将Example类的实例保存到YAML文件中。

public class Example {String name;int value;public String getName() {    return name;}public void setName(String name) {    this.name = name;}public int getValue() {    return value;}public void setValue(int value) {    this.value = value;}

}

答案1

小编典典

Jackson具有支持YAML的模块。确保将必需的依赖项添加到项目中,然后可以按以下方式使用它:

// Create an ObjectMapper mapper for YAMLObjectMapper mapper = new ObjectMapper(new YAMLFactory());// Write object as YAML filemapper.writeValue(new File("/path/to/yaml/file"), example);

或者,您可以将对象写为字符串:

// Write object as YAML stringString yaml = mapper.writeValueAsString(example);

Jackson通过反射将Json转化为java对象

Jackson通过反射将Json转化为java对象

Jackson的功能比较强大,我们这里主要使用Data Binding的方式,来看看如何使用反射将json转化为java bean,先加入如下依赖:

Jackson 的核心模块由三部分组成。

  • jackson-core,核心包,提供基于"流模式"解析的相关 API,它包括 JsonPaser 和 JsonGenerator。 Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。
  • jackson-annotations,注解包,提供标准注解功能;
  • jackson-databind ,数据绑定包, 提供基于"对象绑定" 解析的相关 API ( ObjectMapper ) 和"树模型" 解析的相关 API (JsonNode);基于"对象绑定" 解析的 API 和"树模型"解析的 API 依赖基于"流模式"解析的 API。

然后我们就可以写个demo看看:

输出:

入参都是类似的,传入json字符串和需要转化为的class,然后看看里面的方法是怎么处理的,之前还有很多预处理的方法,直接跳过吧,主要看看里面的解析的。先用createUsingDefault(DeserializationContext ctxt)返回一个使用默认构造方法创建的对象。

这里对于json的处理都放在JsonParser中,这里获取相应的类中的变量,然后使用deserializeAndSet方法设置值,现在觉得反射真是一个好东西呀,不然都不好处理,尤其是不知道都是什么类对象的情况,当然这里只是简单类对象的情况,复杂的后续再看看。

这里最后调用的_setter.invoke(instance, value)来设置变量值。

后续还会有一些检查,未完待续!

参考:https://blog.csdn.net/gjb724332682/article/details/51586701

Jackson:使用jackson将json字符串响应转换为pojo转换时过滤空值或空值

Jackson:使用jackson将json字符串响应转换为pojo转换时过滤空值或空值

我正在使用杰克逊将杰森的回应转换为pojo列表.以下是我得到的回复.

[

    {
        "code": "","total": 24,"name": null
    },{
        "code": "","total": 1,"name": "Test"
    }
]

我正在将它转换为Pojo列表.下面是我的pojo.

public class ItemCategory {

private String code;
private String name;
private String total;

public ItemCategory() {
}

public ItemCategory(final String code,final String name,final String total) {
    super();
    this.code = code;
    this.name = name;
    this.total = total;
}

/**
 * @return the code
 */
public String getCode() {
    return code;
}

/**
 * @param code
 *            the code to set
 */
public void setCode(final String code) {
    this.code = code;
}

/**
 * @return the name
 */
public String getName() {
    return name;
}

/**
 * @param name
 *            the name to set
 */
public void setName(final String name) {
    this.name = name;
}

/**
 * @return the count
 */
public String getTotal() {
    return total;
}

/**
 * @param count
 *            the count to set
 */
public void setTotal(final String total) {
    this.total = total;
}
}

一切正常.但我想删除要转换为pojo的值,其代码为空/空值.即“代码”:“”,或“代码”:null

我使用下面的jackson代码将json转换为pojo.

Object pojo = null;
try {
    pojo = mapper.readValue(jsonString,typeReference);
} catch (JsonParseException e) {
    throw new InvalidPojoException(e.toString(),e);
} catch (JsonMappingException e) {
    throw new InvalidPojoException(e.toString(),e);
} catch (IOException e) {
    throw new InvalidPojoException(e.toString(),e);
} catch (Exception e) {
    throw new InvalidPojoException(e.toString(),e);
}
return pojo;

使用以下代码为json对象.

(List<ItemCategory>) JsonParserUtil.toPojo(serviceResponse.getStringResponse(),new TypeReference<List<ItemCategory>>(){});

任何指针都会受到赞赏.

提前致谢.

解决方法

你可能想要像这样注释你的bean类:

@JsonSerialize(
include=JsonSerialize.Inclusion.NON_NULL,)

java - 在java中使用snakeyaml写入yaml时,我可以只删除大括号吗

java - 在java中使用snakeyaml写入yaml时,我可以只删除大括号吗

如何解决java - 在java中使用snakeyaml写入yaml时,我可以只删除大括号吗?

我正在使用蛇 yaml 转储到 yaml 文件中。 但是大括号也被写入文件。

root:
  nested_object1:
    mapping:
    - [element1,element2]
    - [element1,element2]
    test: {
       obj1: true,obj2: true,obj3: false
    }

我也使用了 FlowStyle.BLOCK,但它也删除了方括号。

最终结果应该是 -

root:
 nested_object1:
    mapping:
    - [element1,element2]
    test:
       obj1: true
       obj2: true
       obj3: false
    

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

java-使用jackson将json字符串映射到对象将抛出MismatchedInputException

java-使用jackson将json字符串映射到对象将抛出MismatchedInputException

我有一堂简单的课

public class AuthenticationToken {

    public String token;

    public AuthenticationToken(String token) {
        this.token = token;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }
}

使用杰克逊,我试图像这样将字符串映射到此对象

private String input = "{\"token\":\"adf\"}";


@Test
public void whenjsonString_ThenCreateAuthenticationObject() throws IOException {

    ObjectMapper jsonMapper = new ObjectMapper();
    AuthenticationToken tokenObject = jsonMapper.readValue(input,AuthenticationToken.class);
    assertthat(tokenObject).isNotNull();
}

但它引发以下异常

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `foo.AuthenticationToken` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"token":"adf"}"; line: 1,column: 2]

我试图将AuthenticationToken中的属性注释为@JsonProperty,但这也导致了此异常.

最佳答案
杰克逊默认情况下会期望一个“空”构造函数,并会通过为每个字段提供的getter和setter来自动填充您的Object.

因此,删除构造函数的参数已经可以解决您的问题:

public class AuthenticationToken {

    public String token;

    public AuthenticationToken() {}

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }
}

如果您想保持当前的构造函数不变,也可以只添加一个空的构造函数.测试了您的测试用例的两个选项,都可以正常工作.

今天关于使用Jackson将Java对象实例写入YAMLjava jackson使用的讲解已经结束,谢谢您的阅读,如果想了解更多关于Jackson通过反射将Json转化为java对象、Jackson:使用jackson将json字符串响应转换为pojo转换时过滤空值或空值、java - 在java中使用snakeyaml写入yaml时,我可以只删除大括号吗、java-使用jackson将json字符串映射到对象将抛出MismatchedInputException的相关知识,请在本站搜索。

本文标签: