.net core json 为null输出_使用Java将JSON转换为POJO

6d5466e1c7a7d6b7758019c4faa2d1f0.png

如果您有要映射到POJO而不需要编写完整的POJO类的JSON,则可以使用jsonschema2pojo库。这是一个出色的库,可以使用输入的JSON创建Java类。

先决条件

程式语言:Java

Pom依赖关系

<dependency>

<groupId>org.jsonschema2pojo</groupId>

<artifactId>jsonschema2pojo-core</artifactId>

<version>0.4.35</version>

</dependency>

程序

主要方法:

public static void main(String[] args) {

String packageName="com.cooltrickshome";

File inputJson= new File("."+File.separator+"input.json");

File outputPojoDirectory=new File("."+File.separator+"convertedPojo");

outputPojoDirectory.mkdirs();

try {

new JsonToPojo().convert2JSON(inputJson.toURI().toURL(), outputPojoDirectory, packageName, inputJson.getName().replace(".json", ""));

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println("Encountered issue while converting to pojo: "+e.getMessage());

e.printStackTrace();

}

}

怎么运行的

1. packageName定义输出POJO类的包名称。

2. inputJson定义了需要转换为POJO的JSON。

3. outputPojoDirectory是将在其中创建POJO文件的本地路径。

4. 我们调用创建的convert2JSON方法,传递输入JSON,输出路径,packageName和输出POJO类名。

convert2JSON方法:

public void convert2JSON(URL inputJson, File outputPojoDirectory, String packageName, String className) throws IOException{

JCodeModel codeModel = new JCodeModel();

URL source = inputJson;

GenerationConfig config = new DefaultGenerationConfig() {

@Override

public boolean isGenerateBuilders() { // set config option by overriding method

return true;

}

public SourceType getSourceType(){

return SourceType.JSON;

}

};

SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator());

mapper.generate(codeModel, className, packageName, source);

codeModel.build(outputPojoDirectory);

}

怎么运行的

1.

我们创建一个JCodeModel对象,该对象将用于生成Java类。

2.

3.

我们定义了jsonschema2pojo的配置,该配置使程序知道输入源文件是JSON(getSourceType方法)。

4.

5.

现在,我们将配置以及在步骤1中创建的codeModel一起传递给schemamapper,后者将通过提供的JSON创建JavaType。

6.

7.

最后,我们调用build方法来创建输出类。

8.

完整程序

package com.cooltrickshome;

import java.io.File;

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URL;

import org.jsonschema2pojo.DefaultGenerationConfig;

import org.jsonschema2pojo.GenerationConfig;

import org.jsonschema2pojo.Jackson2Annotator;

import org.jsonschema2pojo.SchemaGenerator;

import org.jsonschema2pojo.SchemaMapper;

import org.jsonschema2pojo.SchemaStore;

import org.jsonschema2pojo.SourceType;

import org.jsonschema2pojo.rules.RuleFactory;

import com.sun.codemodel.JCodeModel;

public class JsonToPojo {

/**

* @param args

*/

public static void main(String[] args) {

String packageName="com.cooltrickshome";

File inputJson= new File("."+File.separator+"input.json");

File outputPojoDirectory=new File("."+File.separator+"convertedPojo");

outputPojoDirectory.mkdirs();

try {

new JsonToPojo().convert2JSON(inputJson.toURI().toURL(), outputPojoDirectory, packageName, inputJson.getName().replace(".json", ""));

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println("Encountered issue while converting to pojo: "+e.getMessage());

e.printStackTrace();

}

}

public void convert2JSON(URL inputJson, File outputPojoDirectory, String packageName, String className) throws IOException{

JCodeModel codeModel = new JCodeModel();

URL source = inputJson;

GenerationConfig config = new DefaultGenerationConfig() {

@Override

public boolean isGenerateBuilders() { // set config option by overriding method

return true;

}

public SourceType getSourceType(){

return SourceType.JSON;

}

};

SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator());

mapper.generate(codeModel, className, packageName, source);

codeModel.build(outputPojoDirectory);

}

}


输入JSON:

{

"name": "Virat",

"sport": "cricket",

"age": 25,

"id": 121,

"lastScores": [

77,

72,

23,

57,

54,

36,

74,

17

]

}

生成的输出类:

package com.cooltrickshome;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import com.fasterxml.jackson.annotation.JsonAnyGetter;

import com.fasterxml.jackson.annotation.JsonAnySetter;

import com.fasterxml.jackson.annotation.JsonIgnore;

import com.fasterxml.jackson.annotation.JsonInclude;

import com.fasterxml.jackson.annotation.JsonProperty;

import com.fasterxml.jackson.annotation.JsonPropertyOrder;

import org.apache.commons.lang.builder.EqualsBuilder;

import org.apache.commons.lang.builder.HashCodeBuilder;

import org.apache.commons.lang.builder.ToStringBuilder;

@JsonInclude(JsonInclude.Include.NON_NULL)

@JsonPropertyOrder({

"name",

"sport",

"age",

"id",

"lastScores"

})

public class Input {

@JsonProperty("name")

private String name;

@JsonProperty("sport")

private String sport;

@JsonProperty("age")

private Integer age;

@JsonProperty("id")

private Integer id;

@JsonProperty("lastScores")

private List < Integer > lastScores = new ArrayList < Integer > ();

@JsonIgnore

private Map < String, Object > additionalProperties = new HashMap < String, Object > ();

@JsonProperty("name")

public String getName() {

return name;

}

@JsonProperty("name")

public void setName(String name) {

this.name = name;

}

public Input withName(String name) {

this.name = name;

return this;

}

@JsonProperty("sport")

public String getSport() {

return sport;

}

@JsonProperty("sport")

public void setSport(String sport) {

this.sport = sport;

}

public Input withSport(String sport) {

this.sport = sport;

return this;

}

@JsonProperty("age")

public Integer getAge() {

return age;

}

@JsonProperty("age")

public void setAge(Integer age) {

this.age = age;

}

public Input withAge(Integer age) {

this.age = age;

return this;

}

@JsonProperty("id")

public Integer getId() {

return id;

}

@JsonProperty("id")

public void setId(Integer id) {

this.id = id;

}

public Input withId(Integer id) {

this.id = id;

return this;

}

@JsonProperty("lastScores")

public List < Integer > getLastScores() {

return lastScores;

}

@JsonProperty("lastScores")

public void setLastScores(List < Integer > lastScores) {

this.lastScores = lastScores;

}

public Input withLastScores(List < Integer > lastScores) {

this.lastScores = lastScores;

return this;

}

@Override

public String toString() {

return ToStringBuilder.reflectionToString(this);

}

@JsonAnyGetter

public Map < String, Object > getAdditionalProperties() {

return this.additionalProperties;

}

@JsonAnySetter

public void setAdditionalProperty(String name, Object value) {

this.additionalProperties.put(name, value);

}

public Input withAdditionalProperty(String name, Object value) {

this.additionalProperties.put(name, value);

return this;

}

@Override

public int hashCode() {

return new HashCodeBuilder().append(name).append(sport).append(age).append(id).append(lastScores).append(additionalProperties).toHashCode();

}

@Override

public boolean equals(Object other) {

if (other == this) {

return true;

}

if ((other instanceof Input) == false) {

return false;

}

Input rhs = ((Input) other);

return new EqualsBuilder().append(name, rhs.name).append(sport, rhs.sport).append(age, rhs.age).append(id, rhs.id).append(lastScores, rhs.lastScores).append(additionalProperties, rhs.additionalProperties).isEquals();

}

}

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

521a9fdc2aef8e5fb0bac4a86ccb33fe.png

97dc065170cbc84c2fd52d94a21c55d7.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Jackson 库中的 @JsonSerialize 注解,将 List 转化Json。具体实现方式如下: 1. 定义一个 POJO 类,包含一个 List 类型的属性。 2. 在该属性上添加 @JsonSerialize 注解,指定使用 Jackson 库中的 ListSerializer 类进行序列化。 3. 在 ListSerializer 类中,重写 serialize 方法,将 List 转化Json。 示例代码如下: ``` public class MyObject { @JsonSerialize(using = ListSerializer.class) private List<String> myList; // getter 和 setter 方法 } public class ListSerializer extends JsonSerializer<List<?>> { @Override public void serialize(List<?> list, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeStartArray(); for (Object obj : list) { jsonGenerator.writeObject(obj); } jsonGenerator.writeEndArray(); } } ``` 这样,当使用 Jackson 库将 MyObject 对象转化Json 时,List 类型的属性就会被正确地序列化为一个 Json 数组。 ### 回答2: 在Java中,我们可以使用注解将List转换Json。首先,我们需要引入相应的依赖注解库,例如Jackson等。接下来,我们可以在List变量的前面加上相应的注解,例如@JsonProperty,用于指定Json中的字段名。同时,我们也可以使用@JsonFormat注解来指定日期等特殊类型的格式化方式。 示例代码如下: ``` import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; import java.util.List; public class ListToJsonExample { public static void main(String[] args) throws JsonProcessingException { List<Student> students = new ArrayList<Student>(); students.add(new Student("Alice", 18)); students.add(new Student("Bob", 20)); ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(students); System.out.println(json); } static class Student { @JsonProperty("name") private String name; @JsonProperty("age") private int age; public Student(String name, int age) { this.name = name; this.age = age; } // Getter and Setter } } ``` 在以上示例中,我们定义了一个Student类,其中使用了@JsonProperty注解来指定对应的字段名。然后,我们创建了一个Student的List,并添加了两个学生对象。接着,我们使用ObjectMapper类将List转换Json字符串,并打印输出。 上述代码的输出结果为: ``` [{"name":"Alice","age":18},{"name":"Bob","age":20}] ``` 从输出结果可以看出,我们成功将List转换为了对应的Json字符串。这样,我们就可以方便地将List对象转换Json,以便于后续的数据传输和处理。 ### 回答3: 在Java中,我们可以使用注解将List转换Json。首先,需要引入相关的库,如Jackson库。然后,我们可以在List的定义上使用注解,例如@JsonSerialize注解来指定序列化的方式,比如将List中的对象按照指定的格式进行序列化。 示例代码如下: ```java // 导入相关的库 import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import java.util.List; // 定义一个类,用于演示 public class MyClass { private List<String> myList; public List<String> getMyList() { return myList; } public void setMyList(List<String> myList) { this.myList = myList; } } // 创建对象并设置List的值 MyClass myObject = new MyClass(); myObject.setMyList(Arrays.asList("value1", "value2", "value3")); // 创建ObjectMapper对象 ObjectMapper objectMapper = new ObjectMapper(); // 创建一个简单模块,用于序列化List SimpleModule simpleModule = new SimpleModule(); // 设置List的序列化方式 simpleModule.addSerializer(List.class, new ToStringSerializer()); // 注册模块到ObjectMapper objectMapper.registerModule(simpleModule); // 将List转换Json字符串 String json = objectMapper.writeValueAsString(myObject); System.out.println(json); ``` 上述代码中,我们使用了Jackson库中的ObjectMapper对象来进行序列化操作。通过创建一个简单模块,并设置List的序列化方式为ToStringSerializer,然后将该模块注册到ObjectMapper中,最后使用writeValueAsString方法将List转换Json字符串。 最终的输出结果为:{"myList":["value1","value2","value3"]}。这就是将List转换Json的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值