在与服务端通过JSON格式进行交互过程中,不同版本的JSON库在对于key-value为null情况上的处理不同。
Android自带的org.json对key-value都要求不能为null,对于必传的字段需要留意一下,尤其是留意value是否可能出现null的情形。否则导致服务端解析出现问题。
此坑已被踩中,留下小记。下面直接看一下相应位置源码:
1 public class JSONObject { 2 3 ...... 4 5 /** 6 * Maps { @code name} to { @code value}, clobbering any existing name/value 7 * mapping with the same name. If the value is { @code null}, any existing 8 * mapping for { @code name} is removed. 9 *10 * @param value a { @link JSONObject}, { @link JSONArray}, String, Boolean,11 * Integer, Long, Double, { @link #NULL}, or { @code null}. May not be12 * { @link Double#isNaN() NaNs} or { @link Double#isInfinite()13 * infinities}.14 * @return this object.15 */16 public JSONObject put(String name, Object value) throws JSONException {17 if (value == null) {18 nameValuePairs.remove(name);19 return this;20 }21 if (value instanceof Number) {22 // deviate from the original by checking all Numbers, not just floats & doubles23 JSON.checkDouble(((Number) value).doubleValue());24 }25 nameValuePairs.put(checkName(name), value);26 return this;27 }28 29 30 String checkName(String name) throws JSONException {31 if (name == null) {32 throw new JSONException("Names must be non-null");33 }34 return name;35 }36 37 38 ......39 40 }