JSONObject 和 HashMap转字符串的说明

27 篇文章 1 订阅

简单比较说明

本篇博客,不是分析JSONObject 和 HashMap的底层原理和区别的,菜鸡一枚,没有这种能耐。

而是仅比较JSONObject 和 HashMap转字符串的情况,是做一个采坑心得,并对两者做简单比较总结。

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {
    // do something
}

public class JSONObject extends JSON implements Map<String, Object>, JSONAware, Cloneable, Serializable, InvocationHandler {
    // do something
}

 通过上传截取的代码片段可以得知,HashMap基础功能主要来源于其继承的AbstractMap类,而JSONObject基础功能主要来源于其继承的HashMap类。

因此,基本上可以说在用法上 JSONObject和HashMap是没有明显差别的,可以混用(如有错误,请大佬督正)。

 

转字符串说明

在工作中,我也经常使用HashMap用于前后端交换数据。然而在一次三方平台对接中却遇到了一个问题,报错信息如下:

Exception in thread "main" com.alibaba.fastjson.JSONException: expect ':' at 0, actual =
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:266)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1189)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1158)
	at com.alibaba.fastjson.JSON.parse(JSON.java:102)
	at com.alibaba.fastjson.JSON.parse(JSON.java:93)
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:164)
	at com.krt.api.controller.ApiLoginController.main(MainController.java:25)

主要问题是JSONObject 和 HashMap的toString() 方法是不一样的,且HashMap的toString() 方法更烂,转字符串之后无法转回来。

JSONObject转字符串后:{"a":123,"b":"123"}      // 后面还可以转换回来

HashMap转字符串后:{a=123, b=123}    // 基本报废,该字符串无法转换成其他Object

public static void main(String[] args) {
	JSONObject json = new JSONObject();
	json.put("a", 123);
	json.put("b", "123");

	HashMap map = new HashMap();
	map.put("a", 123);
	map.put("b", "123");

	System.out.println(json.toJSONString());              // {"a":123,"b":"123"}
	System.out.println(map.toString());                   // {a=123, b=123}
	System.out.println(JSONObject.toJSONString(map));     // {"a":123,"b":"123"}
	
    // 可以转换
	JSONObject json2 = JSONObject.parseObject("{\"a\":123,\"b\":\"123\"}");
    // 可以转换
	HashMap map2 = JSONObject.parseObject("{\"a\":123,\"b\":\"123\"}", HashMap.class);
		
    // 报错JSONException
	JSONObject json3 = JSONObject.parseObject("{a=123, b=123}");
    // 报错JSONException
    HashMap map3 = JSONObject.parseObject("{a=123, b=123}", HashMap.class);
}

 

总结

JSONObject和HashMap在用法上基本没有差别,但是需要注意HashMap的toString()方法。

用该方法转换的字符串,基本就报废了,没有意义,其他平台或方法接收后也无法解析回Object。

推荐使用JSONObject.toJSONString() 方法来,转换成字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值