当前位置:   article > 正文

【转】map.toString() 和 JSONObject.toJSONString( map ) 的结果是有区别的

map.tostring

1 .

Map<String, Integer> map = new HashMap<>();
map.put( "staff9", 1 );
map.put( "staff1", 3 );


System.out.println( map.toString() );    // 结果是 {staff9=1, staff1=3}   

 

// JSONObjectcom.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的名称。

  1. @JSONField作用在Field时,其name不仅定义了输入key的名称,同时也定义了输出的名称。
  2. public class Person {
  3. @JSONField(name = "name") // 注意观察生成的JSON串中name和age的区别
  4. private String name;
  5. @JSONField(name = "AGE")
  6. private String age;
  7. public String getName() {
  8. return name;
  9. }
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public String getAge() {
  14. return age;
  15. }
  16. public void setAge(String age) {
  17. this.age = age;
  18. }
  19. }
  20. @JSONField也可以直接作用在get或set方法上
  21. @JSONField(name = "name")
  22. public String getName() {
  23. return name;
  24. }
  25. @JSONField(name = "name")
  26. public void setName(String name) {
  27. this.name = name;
  28. }
  29. @JSONField(name = "AGE")
  30. public String getAge() {
  31. return age;
  32. }
  33. @JSONField(name = "AGE")
  34. public void setAge(String age) {
  35. this.age = age;
  36. }
  37. PSFastJson在进行操作时,是根据getter和setter的方法进行的,并不是依据Field进行。
  1. public class PersonTest {
  2. private Person person;
  3. /**
  4. * 初始化对象
  5. */
  6. @Before
  7. public void setUp() {
  8. person = new Person();
  9. person.setName("gyl");
  10. person.setAge("20");
  11. }
  12. @Test
  13. public void test() {
  14. String jsonStr = JSONObject.toJSONString(person);
  15. System.out.println("bean to json:" + jsonStr);
  16. person = JSONObject.toJavaObject(JSONObject.parseObject(jsonStr), Person.class);
  17. System.out.println("json to bean:" + person.getName());
  18. }
  19. }
  1. Output:
  2. bean to json:{"AGE":"20","name":"gyl"}
  3. json to bean:gyl

JSONField默认支持的类型

  1. public @interface JSONField {
  2. int ordinal() default 0;
  3. String name() default "";
  4. String format() default "";
  5. boolean serialize() default true;
  6. boolean deserialize() default true;
  7. SerializerFeature[] serialzeFeatures() default {};
  8. Feature[] parseFeatures() default {};
  9. String label() default "";
  10. boolean jsonDirect() default false;
  11. Class<?> serializeUsing() default Void.class;
  12. Class<?> deserializeUsing() default Void.class;
  13. String[] alternateNames() default {};
  14. boolean unwrapped() default false;
  15. }

format规定日期格式

  1. @JSONField(format="yyyy-MM-dd HH:mm:ss")
  2. private Date date;

ordinal规定字段的顺序

  1. @JSONField(ordinal = 3)
  2. private int f0;
  3. @JSONField(ordinal = 2)
  4. private int f1;
  5. @JSONField(ordinal = 1)
  6. private int f2;
  7. fastjson序列化⼀个java bean,是根据fieldName的字母序进⾏序列的你可以通过ordinal指定字段的顺序。

serialize/deserialize指定字段不序列化

  1. @JSONField(serialize=false)
  2. public Date date;

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/973879
推荐阅读
相关标签
  

闽ICP备14008679号