Android的JSONObject 使用HashMap来存储key-value

public JSONObject() {   nameValuePairs = new HashMap();}

JSONObject.toString 通过遍历HashMap来输出一个个key-value

    public String toString(int indentSpaces) throws JSONException {        JSONStringer stringer = new JSONStringer(indentSpaces);        writeTo(stringer);        return stringer.toString();    }    void writeTo(JSONStringer stringer) throws JSONException {        stringer.object();        for (Map.Entry entry : nameValuePairs.entrySet()) {            stringer.key(entry.getKey()).value(entry.getValue());        }        stringer.endObject();    }

从中看出HashMap.entrySet()的遍历顺序决定了输出json字符串的key-value顺序。 而HashMap是由数组+链表构成,如果阅读HashMap源码就知道,这个顺序取决于三个因素:key, 插入顺序,HashMap的当前长度。 因此对同样一组key-value生成Json字符串就有两个因素决定:插入循序,HashMap当前长度。

开发中最容易忽略的一种插入循序导致json字符串不同的例子

        String key1 = "due_time";        String value1 = "0";        String key2 = "attachment";        String value2 = "a.jpg";        try {            JSONObject json1 = new JSONObject();            json1.put(key1, value1);            json1.put(key2, value2);            Log.d("test", "json1:" + json1.toString());            JSONObject json2 = new JSONObject(json1.toString());            Log.d("test", "json2:" + json2.toString());        } catch (Exception e) {        }

输出的结果:

D/test    ( 9577): json1:{"attachment":"a.jpg","due_time":"0"}D/test    ( 9577): json2:{"due_time":"0","attachment":"a.jpg"}

因此解决上述需求,大家可以使用fastjson,他输出的字符串是以key排序的。
关于fastjson的获取可见:
https://github.com/alibaba/fastjson/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

更多相关文章

  1. listview为空时,显示字符串
  2. android 字符串、颜色和尺寸
  3. android根据姓名首字母字符顺序读取通信录
  4. Android DataBinding 字符串拼接
  5. Android xliff和字符串资源
  6. android xliff字符串操作
  7. android 读取json数据(遍历JSONObject和JSONArray)
  8. Android Base64字符串转换成图片
  9. Android Studio如何轻松整理字符串到string.xml中

随机推荐

  1. 【有人@我】Android中高亮变色显示文本中
  2. Android接入多盟广告SDK--让你的APP通过
  3. Anroid Wear OS 手表应用开发 - 微光模式
  4. [置顶] Android(安卓)Binder通信机制学习
  5. android 缓存管理与常用算法
  6. Android(安卓)自定义View界面大合集
  7. 东拼西凑写的android 相机例子,包含一些遇
  8. 开发一个 Android(安卓)双人视频社(shuai)
  9. Android中利用ContentResolver获取本地音
  10. 牛B的Android(安卓)UI--第18章 与用户交