赞
踩
1 .
Map<String, Integer> map = new HashMap<>();
map.put( "staff9", 1 );
map.put( "staff1", 3 );
System.out.println( map.toString() ); // 结果是 {staff9=1, staff1=3}
// JSONObject 是 com.alibaba.fastjson.JSONObject
System.out.println( JSONObject.toJSONString( map ) ); // 结果是 {"staff9":1,"staff1":3}
2.
JSONObject.toJSONString把属性的大小写改变了
class A{
//xxx
private String QKRQ;
//xxxx
private String QKDH;
}
通过fastjson.tostring后属性的首字母会变成小写。
我们在创建实体类的时候,都要求属性必须创建get和set方法,否则fastjson将不会进行识别
本想把A对象通过fastjson序列化后传给客户端,但是传到客户端的数据却并非自己想要的,QKRQ、QKDH这些属性通过JSONObject.toJSONString序列化后变成了qKRQ、qKDH,研究了下通过@JSONField(name="QKRQ")设置后返回客户端的属性首字母就不会被小写了!!
@JSONField注解可以用在方法(method),属性(field)以及方法中的参数(parameter)上。JSONField中的name属性用来指定JSON串中key的名称。
- @JSONField作用在Field时,其name不仅定义了输入key的名称,同时也定义了输出的名称。
- public class Person {
- @JSONField(name = "name") // 注意观察生成的JSON串中name和age的区别
- private String name;
- @JSONField(name = "AGE")
- private String age;
-
- 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;
- }
- }
-
- @JSONField也可以直接作用在get或set方法上
- @JSONField(name = "name")
- public String getName() {
- return name;
- }
-
- @JSONField(name = "name")
- public void setName(String name) {
- this.name = name;
- }
-
- @JSONField(name = "AGE")
- public String getAge() {
- return age;
- }
-
- @JSONField(name = "AGE")
- public void setAge(String age) {
- this.age = age;
- }
-
- PS:FastJson在进行操作时,是根据getter和setter的方法进行的,并不是依据Field进行。
-
- public class PersonTest {
- private Person person;
-
- /**
- * 初始化对象
- */
- @Before
- public void setUp() {
- person = new Person();
- person.setName("gyl");
- person.setAge("20");
- }
-
- @Test
- public void test() {
- String jsonStr = JSONObject.toJSONString(person);
- System.out.println("bean to json:" + jsonStr);
- person = JSONObject.toJavaObject(JSONObject.parseObject(jsonStr), Person.class);
- System.out.println("json to bean:" + person.getName());
- }
- }
-
- Output:
- bean to json:{"AGE":"20","name":"gyl"}
- json to bean:gyl
- public @interface JSONField {
- int ordinal() default 0;
-
- String name() default "";
-
- String format() default "";
-
- boolean serialize() default true;
-
- boolean deserialize() default true;
-
- SerializerFeature[] serialzeFeatures() default {};
-
- Feature[] parseFeatures() default {};
-
- String label() default "";
-
- boolean jsonDirect() default false;
-
- Class<?> serializeUsing() default Void.class;
-
- Class<?> deserializeUsing() default Void.class;
-
- String[] alternateNames() default {};
-
- boolean unwrapped() default false;
- }
-
- @JSONField(format="yyyy-MM-dd HH:mm:ss")
- private Date date;
- @JSONField(ordinal = 3)
- private int f0;
-
- @JSONField(ordinal = 2)
- private int f1;
-
- @JSONField(ordinal = 1)
- private int f2;
- fastjson序列化⼀个java bean,是根据fieldName的字母序进⾏序列的你可以通过ordinal指定字段的顺序。
- @JSONField(serialize=false)
- public Date date;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。