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

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

JSONField默认支持的类型

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;
}

format规定日期格式

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

ordinal规定字段的顺序

@JSONField(ordinal = 3)
private int f0;

@JSONField(ordinal = 2)
private int f1;

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

serialize/deserialize指定字段不序列化

@JSONField(serialize=false)
public Date date;

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 对于第一个问题println(map),这段代码是将map对象直接打印出来。具体来说,它会打印出map对象的内容,包括键值对。 对于第二个问题println(JSONObject.toJSONString(map)),这段代码是将map对象换为JSON字符串并打印出来。具体来说,它会将map对象换为JSON格式的字符串表示,其中键值对会被换为对应的JSON键值对。 引用\[1\]中的代码示例展示了如何将map对象换为JSON字符串。通过使用JSONObject.toJSONString方法,将map对象换为JSON格式的字符串表示。 引用\[3\]中的代码示例也展示了如何将map对象换为JSON字符串。通过使用JSONObject.toJSONString方法,将map对象换为JSON格式的字符串表示。 所以,println(map)会直接打印出map对象的内容,而println(JSONObject.toJSONString(map))会将map对象换为JSON字符串并打印出来。 #### 引用[.reference_title] - *1* *2* [Java jsonObject map 对象](https://blog.csdn.net/m0_67392010/article/details/123634402)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【map.toString() 和 JSONObject.toJSONString( map ) 的结果是有区别的](https://blog.csdn.net/beidaol/article/details/99738118)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值