net.minidev.json.writer.BeansMapper Maven / Gradle / Ivy
Go to download
JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999. JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.
package net.minidev.json.writer;
/*
* Copyright 2011 JSON-SMART authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.lang.reflect.Type;
import java.util.Date;
import java.util.HashMap;
import net.minidev.asm.Accessor;
import net.minidev.asm.BeansAccess;
import net.minidev.asm.ConvertDate;
import net.minidev.json.JSONUtil;
@SuppressWarnings("unchecked")
public abstract class BeansMapper extends JsonReaderI {
public BeansMapper(JsonReader base) {
super(base);
}
public abstract Object getValue(Object current, String key);
public static class Bean extends JsonReaderI {
final Class clz;
final BeansAccess ba;
final HashMap index;
public Bean(JsonReader base, Class clz) {
super(base);
this.clz = clz;
this.ba = BeansAccess.get(clz, JSONUtil.JSON_SMART_FIELD_FILTER);
this.index = ba.getMap();
}
@Override
public void setValue(Object current, String key, Object value) {
ba.set((T) current, key, value);
// Accessor nfo = index.get(key);
// if (nfo == null)
// throw new RuntimeException("Can not set " + key + " field in " +
// clz);
// value = JSONUtil.convertTo(value, nfo.getType());
// ba.set((T) current, nfo.getIndex(), value);
}
public Object getValue(Object current, String key) {
return ba.get((T) current, key);
// Accessor nfo = index.get(key);
// if (nfo == null)
// throw new RuntimeException("Can not set " + key + " field in " +
// clz);
// return ba.get((T) current, nfo.getIndex());
}
@Override
public Type getType(String key) {
Accessor nfo = index.get(key);
return nfo.getGenericType();
}
@Override
public JsonReaderI> startArray(String key) {
Accessor nfo = index.get(key);
if (nfo == null)
throw new RuntimeException("Can not find Array '" + key + "' field in " + clz);
return base.getMapper(nfo.getGenericType());
}
@Override
public JsonReaderI> startObject(String key) {
Accessor f = index.get(key);
if (f == null)
throw new RuntimeException("Can not find Object '" + key + "' field in " + clz);
return base.getMapper(f.getGenericType());
}
@Override
public Object createObject() {
return ba.newInstance();
}
}
public static class BeanNoConv extends JsonReaderI {
final Class clz;
final BeansAccess ba;
final HashMap index;
public BeanNoConv(JsonReader base, Class clz) {
super(base);
this.clz = clz;
this.ba = BeansAccess.get(clz, JSONUtil.JSON_SMART_FIELD_FILTER);
this.index = ba.getMap();
}
@Override
public void setValue(Object current, String key, Object value) {
ba.set((T) current, key, value);
}
public Object getValue(Object current, String key) {
return ba.get((T) current, key);
}
@Override
public Type getType(String key) {
Accessor nfo = index.get(key);
return nfo.getGenericType();
}
@Override
public JsonReaderI> startArray(String key) {
Accessor nfo = index.get(key);
if (nfo == null)
throw new RuntimeException("Can not set " + key + " field in " + clz);
return base.getMapper(nfo.getGenericType());
}
@Override
public JsonReaderI> startObject(String key) {
Accessor f = index.get(key);
if (f == null)
throw new RuntimeException("Can not set " + key + " field in " + clz);
return base.getMapper(f.getGenericType());
}
@Override
public Object createObject() {
return ba.newInstance();
}
}
public static JsonReaderI MAPPER_DATE = new ArraysMapper(null) {
@Override
public Date convert(Object current) {
return ConvertDate.convertToDate(current);
}
};
}