转换DataObject对象返回Json字符串

因为业务需要记录具体操作日志,就将整个表DataObject数据保存为json字符串

代码如下:

public class DataObjectConvertUtil {

    @Bizlet("转换一个DataObject返回Json字符串")
    public static String convertDataObjectToJsonString(DataObject dataObject) {
        DataObject[] dataObjects = new DataObject[]{dataObject};
        String jsonString = convertDataObjectsToJsonString(dataObjects);
        jsonString = jsonString.substring(1, jsonString.length() - 1);
        return jsonString;
    }
    /**
     * @param dataObject
     * @author linfeng
     * ("转换DataObject数组返回Json字符串")
     */

    public static String convertDataObjectsToJsonString(DataObject[] dataObjects) {
        Map<String,DataObject[]> root = new HashMap<String,DataObject[]>();
        root.put("data", dataObjects);

        StringWriter stringWriter = new StringWriter();
        JSONWriter jsonWriter = new JSONWriter(stringWriter);
        try {
            ExtendedXMLSerializer serializer = new ExtendedXMLSerializer();
            SerializeOption operation = new SerializeOption();
            operation.setCreateOuterCollectionNode(true);
            serializer.setOption(operation);
            IMarshallingNode node = serializer.marshallToNode(root, "root");
            jsonWriter.object();
            List<IMarshallingNode> children = node.getChildren();
            for (IMarshallingNode child : children) {
                write(child, jsonWriter);
            }
            jsonWriter.endObject();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
        String jsonString = stringWriter.toString();
        jsonString = jsonString.substring(8, jsonString.length() - 1);
        return jsonString;
    }

    private static void write(IMarshallingNode node, JSONWriter writer)
            throws JSONException {
        int type = getNodeType(node);
        List<IMarshallingNode> children = null;
        switch (type) {
        case 1:
            Object nodeValue = node.getValue();
            boolean writeValue = false;
            if ((nodeValue == null) || (Boolean.class == nodeValue.getClass())
                    || (Number.class.isAssignableFrom(nodeValue.getClass()))) {
                writeValue = true;
            }
            if (node.isEntry()) {
                writer.value(writeValue == true ? nodeValue : node.getText());
            } else
                writer.key(node.getName()).value(
                        writeValue == true ? nodeValue : node.getText());

            break;
        case 2:
            if (!node.isEntry()) {
                writer.key(node.getName());
            }
            writer.array();
            children = node.getChildren();
            for (IMarshallingNode child : children) {
                write(child, writer);
            }
            writer.endArray();
            break;
        case 3:
            if (!node.isEntry()) {
                writer.key(node.getName());
            }
            writer.object();
            children = node.getChildren();
            for (IMarshallingNode child : children) {
                write(child, writer);
            }
            writer.endObject();
            break;
        case 4:
            String xml = com.eos.system.utility.XmlUtil.node2String(
                    (Node) node.getValue(), false, false, "UTF-8");

            if (node.isEntry())
                writer.value(xml);
            else {
                writer.key(node.getName()).value(xml);
            }
            break;
        case -1:
        case 0:
            break;
        }
    }

    private static int getNodeType(IMarshallingNode node) {
        if (!node.isSet()) {
            return -1;
        }
        if (node.isXml()) {
            return 4;
        }
        if (node.getChildren().size() <= 0) {
            if (node.getText() != null)
                return 1;
            if ("null".equals(node.getAttribute("__isNullOrEmpty"))) {
                return 1;
            }
            if ("empty".equals(node.getAttribute("__isNullOrEmpty"))) {
                String type = node.getAttribute("__type");
                if (type == null)
                    return 3;
                try {
                    Class clazz = Class
                            .forName(type.substring("java:".length()));

                    if ((clazz != null)
                            && ((clazz.isArray()) || (Collection.class
                                    .isAssignableFrom(clazz)))) {

                        return 2;
                    }
                    return 3;
                } catch (ClassNotFoundException e) {
                }
            }
        } else if (((IMarshallingNode) node.getChildren().get(0)).isEntry()) {
            return 2;
        }
        return 3;
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张大大大大旭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值