java对象转换为json字符串

2026-02-13 15:18:28

大家好,又见面了,我是你们的朋友全栈君。

概要Jackson是基于java平台的json处理框架。

Jackson提供了三种可选的json处理方法:流式API、树模型、数据绑定(data Binding),其中数据绑定是最常用的处理方式;本文主要介绍数据绑定的处理方式。

java对象与json字符串互相转换java对象与json字符串互相转换的关键就是ObjectMapper对象的writeValue()方法 和 readValue()方法;

其中json字符串可以字符串的形式传入/传出,也可以以文件的形式传入/传出,见writeValue()方法 和 readValue()方法不同的参数。

代码语言:javascript复制ObjectMapper mapper = new ObjectMapper();

// java对象转换为json字符换

String Json = mapper.writeValueAsString(student1);

// json字符串转换为java对象

Student student2 = mapper.readValue(Json, Student.class);代码示例代码语言:javascript复制import java.io.IOException;

import org.json.JSONObject;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import com.fasterxml.jackson.core.JsonParseException;

import com.fasterxml.jackson.databind.JsonMappingException;

import com.fasterxml.jackson.databind.ObjectMapper;

public class jacksonTest {

public static void main(String[] args) {

ObjectMapper mapper = new ObjectMapper();

try {

/** json字符串转换为java对象 */

// json中的对象个数比java对象的属性个数少

JSONObject json1 = new JSONObject();

json1.put("name", "anne");

json1.put("age", 15);

String d1 = json1.toString();

Student s1 = mapper.readValue(d1, Student.class);

System.out.println(s1.toString());

// json中出现java对象中没有的属性

JSONObject json2 = new JSONObject();

json2.put("name", "anne");

json2.put("age", 15);

json2.put("sex", "boy");

String d2 = json1.toString();

Student s2 = mapper.readValue(d2, Student.class);

System.out.println(s2.toString());

/** java对象转换为json字符串 */

Student s3 = new Student();

s3.setAge(12);

s3.setHobby("sport");

s3.setName("anne");

String d3 = mapper.writeValueAsString(s3);

System.out.println(d3);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

@JsonIgnoreProperties(ignoreUnknown = true)

class Student {

private String name;

private int age;

private String hobby;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getHobby() {

return hobby;

}

public void setHobby(String hobby) {

this.hobby = hobby;

}

public String toString() {

return "name: " + name + ", age: " + age + ", hobby: " + hobby;

}

}输出:

代码语言:javascript复制name: anne, age: 15, hobby: null

name: anne, age: 15, hobby: null

{"name":"anne","age":12,"hobby":"sport"}说明

1、json字符串中的key应该与java对象的属性名相同

2、java对象中属性如果为private,则需要显示生成getter/setter方法;如果属性为public,则可以不必写getter/setter方法

2、java对象如果有自定义的构造方法,json字符串转换为java对象时会出错

3、如果json字符串中的属性个数小于java对象中的属性个数,可以顺利转换,java中多的那个属性为null

4、如果json字符串中出现java对象中没有的属性,则在将json转换为java对象时会报错:Unrecognized field, not marked as ignorable

解决方法:

在目标对象的类级别上添加注解:@JsonIgnoreProperties(ignoreUnknown = true);如上述代码示例所示

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/193186.html原文链接:https://javaforall.cn