JSONField 注解

JSONField 注解 示例

参考文档: https://cloud.tencent.com/developer/article/2147843

由于json中的key与bean中的属性不能匹配,因此在转换过程中出现了部分属性为null的情况。经过查看官方文档,发现可以使用@JSONField进行解释。

@JSONField的作用对象:

  1. Field @JSONField作用在Field时,其name不仅定义了输入key的名称,同时也定义了输出的名称。
  2. Setter 和 Getter方法 注:FastJson在进行操作时,是根据getter和setter的方法进行的,并不是依据Field进行。

作用Field

@JSONField作用在Field时,其name不仅定义了输入key的名称,同时也定义了输出的名称。代码如下:

package org.java.json.fastjson.bean;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;

public class Person {

	@JSONField(name="name")
	private String name;

	@JSONField(name="age")
	private String age;

	@JSONField(name="desc")
	private String desc;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getDesc() {
		return desc;
	}
	public void setDesc(String desc) {
		this.desc = desc;
	}

	public void setNAME(String NAME) {
		this.name = NAME;
	}

	public void setAGE(String AGE) {
		this.age = AGE;
	}

	public void setDESC(String DESC) {
		this.desc = DESC;
	}

	public String toString() {
		return JSONObject.toJSONString(this);
	}
}

测试:

package org.java.json.fastjson.json;

import org.java.json.fastjson.bean.Person;
import org.junit.Before;
import org.junit.Test;

import com.alibaba.fastjson.JSONObject;

public class PersonTest {

	private Person person;

	/**
	 * 初始化对象
	 */
	@Before
	public void setUp() {
		person = new Person();
		person.setName("xianglj");
		person.setAge("20");
		person.setDesc("只是一个测试");
	}

	@Test
	public void test() {
		String jsonStr = JSONObject.toJSONString(person);
		System.out.println("bean to json:" + jsonStr);

		//改变json的key为大写
		jsonStr = jsonStr.toUpperCase();

		System.out.println("需要转换的json:" + jsonStr);
		person = JSONObject.toJavaObject(JSONObject.parseObject(jsonStr), Person.class);
		System.out.println("json to bean:" + person.getName());
	}
}

输出:

bean to json:{"age":"20","desc":"只是一个测试","name":"xianglj"}
需要转换的json:{"AGE":"20","DESC":"只是一个测试","NAME":"XIANGLJ"}
json to bean:null

作用在setter和getter方法上

顾名思义,当作用在setter方法上时,就相当于根据 name 到 json中寻找对应的值,并调用该setter对象赋值。

当作用在getter上时,在bean转换为json时,其key值为name定义的值。实例如下:

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;

public class Product {

	private String productName;
	private String desc;
	private String price;

	@JSONField(name="name")
	public String getProductName() {
		return productName;
	}

	@JSONField(name="NAME")
	public void setProductName(String productName) {
		this.productName = productName;
	}

	@JSONField(name="desc")
	public String getDesc() {
		return desc;
	}

	@JSONField(name="DESC")
	public void setDesc(String desc) {
		this.desc = desc;
	}

	@JSONField(name="price")
	public String getPrice() {
		return price;
	}

	@JSONField(name="PRICE")
	public void setPrice(String price) {
		this.price = price;
	}

	public String toString() {
		return JSONObject.toJSONString(this);
	}

}

测试:

package org.java.json.fastjson.json;

import org.java.json.fastjson.bean.Product;
import org.junit.Test;

import com.alibaba.fastjson.JSONObject;

/**
 * 对fastjson中的JSON转换做一个测试
 * @author xianglj
 */
public class JsonObjectTest {

	public static void main(String[] args) {
		Product product = new Product();
		product.setProductName("产品");
		product.setDesc("这是一个产品");
		product.setPrice("22.3");

		String jsonStr = JSONObject.toJSONString(product);
		System.out.println("转换为json:" + JSONObject.toJSONString(product));

		//jsonStr = jsonStr.toUpperCase();
		System.out.println(jsonStr);

		product = JSONObject.toJavaObject(JSONObject.parseObject(jsonStr), Product.class);
		System.out.println(product.toString());
	}

	@Test
	public void test() {
		Product product = new Product();
		product.setProductName("产品");
		product.setDesc("这是一个产品");
		product.setPrice("22.3");

		String jsonStr = JSONObject.toJSONString(product);
		System.out.println("转换为json:" + JSONObject.toJSONString(product));

		jsonStr = jsonStr.toUpperCase();
		System.out.println(jsonStr);

		product = JSONObject.toJavaObject(JSONObject.parseObject(jsonStr), Product.class);
		System.out.println(product.toString());
	}
}

输出:

转换为json:{"desc":"这是一个产品","name":"产品","price":"22.3"}
{"DESC":"这是一个产品","NAME":"产品","PRICE":"22.3"}
{"desc":"这是一个产品","name":"产品","price":"22.3"}