Package com.tinkerpop.rexster.protocol.serializer.json.templates

Source Code of com.tinkerpop.rexster.protocol.serializer.json.templates.JsonConverter

package com.tinkerpop.rexster.protocol.serializer.json.templates;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.node.ArrayNode;
import org.codehaus.jackson.node.BooleanNode;
import org.codehaus.jackson.node.DoubleNode;
import org.codehaus.jackson.node.IntNode;
import org.codehaus.jackson.node.JsonNodeFactory;
import org.codehaus.jackson.node.LongNode;
import org.codehaus.jackson.node.NullNode;
import org.codehaus.jackson.node.ObjectNode;
import org.codehaus.jackson.node.TextNode;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
* @author Blake Eggleston (bdeggleston.github.com)
*/
public class JsonConverter {

    /**
     * Recursively converts objects to json nodes
     * @param obj
     * @return
     */
    public static JsonNode toJsonNode(Object obj) {
        if (obj == null) {
            return NullNode.getInstance();
        } else if (obj instanceof Map) {
            ObjectNode map = new ObjectNode(JsonNodeFactory.instance);
            for (Map.Entry entry: ((Map<Object, Object>) obj).entrySet()) {
                map.put(entry.getKey().toString(), toJsonNode(entry.getValue()));
            }
            return map;
        } else if (obj instanceof Iterable) {
            ArrayNode array = new ArrayNode(JsonNodeFactory.instance);
            for (Object o: (Iterable) obj) {
                array.add(toJsonNode(o));
            }
            return array;
        } else if (obj instanceof Object[]) {
            ArrayNode array = new ArrayNode(JsonNodeFactory.instance);
            for (Object o: (Object[]) obj) {
                array.add(toJsonNode(o));
            }
            return array;
        } else if (obj instanceof Integer) {
            return new IntNode((Integer) obj);
        } else if (obj instanceof Long) {
            return new LongNode((Long) obj);
        } else if (obj instanceof Double) {
            return new DoubleNode((Double) obj);
        } else if (obj instanceof Float) {
            return new DoubleNode((Float) obj);
        } else if (obj instanceof Boolean) {
            return BooleanNode.valueOf((Boolean) obj);
        } else {
            return new TextNode(obj.toString());
        }
    }

    /**
     * Recursively converts json nodes from json nodes to objects
     * @param node
     * @return
     */
    public static Object fromJsonNode(JsonNode node) {
        if (node.isNull()) {
            return null;
        } else if (node.isObject()) {
            Map<String, Object> map = new HashMap<String, Object>();
            ObjectNode objectNode = (ObjectNode) node;
            Iterator<String> iterator = objectNode.getFieldNames();
            while (iterator.hasNext()) {
                String key = iterator.next();
                map.put(key, fromJsonNode(objectNode.get(key)));
            }
            return map;
        } else if (node.isArray()) {
            ArrayNode arrayNode = (ArrayNode) node;
            ArrayList<Object> array = new ArrayList<Object>();
            for (int i=0; i<arrayNode.size(); i++) {
                array.add(fromJsonNode(arrayNode.get(i)));
            }
            return array;
        } else if (node.isFloatingPointNumber()) {
            return node.asDouble();
        } else if (node.isIntegralNumber()) {
            return node.asLong();
        } else if (node.isBoolean()) {
            return node.asBoolean();
        } else {
            return node.asText();
        }
    }
}
TOP

Related Classes of com.tinkerpop.rexster.protocol.serializer.json.templates.JsonConverter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.