做Java开发经常要用Json来做数据的格式化解析,虽然在Android平台上我们习惯的使用 JSONObject, 但不知道你有没有这样的疑问,我们在import 包的时候有时会有两个选项,一个是 JSONObject,一个是JsonObject,这两个有什么区别呢。
JSONObject和JsonObject不只是名字的不同,虽然它们在功能上是一样的,但是在细节上有些不同。 JSONObject是属于 org.json.JSONOBject包, 而 JsonObject 属于 com.google.gson.JsonObject包, 在Android上,JSONOBject是原生类,不需要添加依赖包,而JSONObject则需要添加gson依赖,所以在有用gson做解析的项目上有时候可能会引错包。
JSONObject用HashMap保存键值对, JsonObject用 LInkedTreeMap 保存键值对。
如果要添加一个null值,两者在存储和获取上有区别。 JSONObject: 添加 value 为null,这个键值对会被删掉 JsonObject: 添加 value 为null, 可以正常添加 这会导致获取数据的时候也有区别。 JSONObject会获取不到这个键值对,但是 JsonObject则会获取到 null的数据。
因为JSONObject是用HashMap来保存数据的,所以对它toString的时候可能出现顺序和保存顺序不一致的情况。 这一般没什么问题,但是如果要把内容作为数据校验的话可能不行,比如用md5计算,可能会出现每次的校验值都不同。