BeansWriterASMRemap.java

package net.minidev.json.reader;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import net.minidev.asm.Accessor;
import net.minidev.asm.BeansAccess;
import net.minidev.json.JSONObject;
import net.minidev.json.JSONStyle;
import net.minidev.json.JSONUtil;

public class BeansWriterASMRemap implements JsonWriterI<Object> {
  private Map<String, String> rename = new HashMap<String, String>();

  public void renameField(String source, String dest) {
    rename.put(source, dest);
  }

  private String rename(String key) {
    String k2 = rename.get(key);
    if (k2 != null) return k2;
    return key;
  }

  public <E> void writeJSONString(E value, Appendable out, JSONStyle compression)
      throws IOException {
    try {
      Class<?> cls = value.getClass();
      boolean needSep = false;
      @SuppressWarnings("rawtypes")
      BeansAccess fields = BeansAccess.get(cls, JSONUtil.JSON_SMART_FIELD_FILTER);
      out.append('{');
      for (Accessor field : fields.getAccessors()) {
        @SuppressWarnings("unchecked")
        Object v = fields.get(value, field.getIndex());
        if (v == null && compression.ignoreNull()) continue;
        if (needSep) out.append(',');
        else needSep = true;
        String key = field.getName();
        key = rename(key);
        JSONObject.writeJSONKV(key, v, out, compression);
      }
      out.append('}');
    } catch (IOException e) {
      throw e;
    }
  }
}