天天看點

解決 JSONObject.fromObject 數字為 null 時被轉換為 0 問題

  在使用JSONObject.fromObject的時候會遇到一種情況就是當對象的某一個Double型或Integer型的屬性為空的時候,轉JSON的時候會變成0。當一個布爾型的屬性為空的時候,轉JSON的時候會變成FALSE。

  原因就是JSONObject.fromObject轉JSON有一個預設的配置參數,從jar包裡的源碼裡可以看到這些屬性初始值。

package net.sf.json.processors;

import net.sf.json.JSONArray;

import net.sf.json.JSONNull;

import net.sf.json.util.JSONUtils;

public class DefaultDefaultValueProcessor

  implements DefaultValueProcessor

{

  public Object getDefaultValue(Class type)

  {

    if (JSONUtils.isArray(type))

      return new JSONArray();

    if (JSONUtils.isNumber(type)) {

      if (JSONUtils.isDouble(type)) {

        return new Double(0.0D);

      }

      return new Integer(0);

    }

    if (JSONUtils.isBoolean(type))

      return Boolean.FALSE;

    if (JSONUtils.isString(type)) {

      return "";

    }

    return JSONNull.getInstance();

  }

}

 要解決“解決JSONObject.fromObject數字為null時被轉換為0”的問題就要改變這些配置。

 使用JSONObject.fromObject的時候其實有一個配置的參數JsonConfig。用JsonConfig注冊一個新的配置傳給JSONObject.fromObject。

JsonConfig jsonConfig = new JsonConfig();

jsonConfig.registerDefaultValueProcessor(Double.class, new DefaultDefaultValueProcessor() {

    public Object getDefaultValue(Class type) {

        return null;

    }

});

  上面的代碼為将Double類型的初始值注冊為 null,當Double類型的屬性值為空的時候,轉JSON會轉成 null。更多的初始值設定可以通過判斷getDefaultValue傳的class參數來設定。仿照jar包裡的方法寫即可。

  當然如果隻需改變某一個類型的初始值,用上面的代碼即可。

  JsonConfig的使用方法

JSONObject.fromObject(object, jsonConfig)      

繼續閱讀