java常用json解析数据方法

java常用json解析数据方法

在日常开发中,常用的java 解析json数据笔记

 {
  id: "12e3232r34r334t34t3",
 code: "FieldColumn",
 fieldType: "FieldColumn",
 propertiesList: [
 {
code: "PropName",
value: "791b025ac3a116a12e86a42e0f558f0c",
widget: "FieldSubTable",
 },
code: "PropTableName",
 value: "tableHead2"
 },
{
code: "PropType", 
type: "text",
 value: "", attr: ""
},
{
code: "PropReadOnly", 
value: false,
cal: ""
},
{
code: "PropBT", 
value: false
},
{
code: "PropSubTableId",
 index: 2,
 value: "d8be1d4dffcf7944ee5a7bfc7dc0f789"
}
 ]
 }
​

类似这种结构的json数据,我们具体想拿到它的一部分值,我们该如何操作呢?

首先,我们从数据可以看出这是一个{[{},{},{},{},{}......]}的数据集合,它里面的数据分别是的形式

code: "PropSubTableId",
​
 index: 2,
​
 value: "d8be1d4dffcf7944ee5a7bfc7dc0f789"

所以我们可以把这个json数据集合转变为一个list<>的形式接收一下,也可以把它同化为一个string的字符串;具体代码如下:

//使用这两个注解是为了将我传的值方便其他功能引用
@Data
@XmlRootElement 
//这个解释代码类PropSubColumn继承了BaseProperty类
public class PropSubColumn extends BaseProperty {
    //我需要往xml里传值,所以定义了id,parentCode,propBT...等私有参数;方便传值
    private String id;
    private String parentCode;
    private Boolean propBT;
    private String tableName;
    private String tableLabel;
    private Boolean show;
    private String propWidth;
    private PropType propType;
    private PropReadOnly propReadOnly;
    private PropSubTableId propSubTableId;
    //下面方法是处理传过来的jsonObject数据
public static PropSubColumn format(JSONObject property) {
        PropSubColumn propSubColumn = new PropSubColumn();
    //因为传过来的数据是key,value形式的json字符串,所以可直接传值
        propSubColumn.setId(property.getString("id"));
        propSubColumn.setParentCode((String) property.get("parentCode"));
    //但是这个json字符串里还有一个[{},{}...]json数组,所以先使用字符串接收一下
        String propertiesList = property.get("propertiesList").toString();
        String tableName = "";
        String tableLabel = "";
        Boolean isShow = true;
        String propWidth = "";
        Boolean propBT = false; 
    //需要判断数据是否为空,如果传过来的数组不为空,执行下面for循环,获取数据然后传值
if (StringUtilExt.isNotEmpty(propertiesList)) {
    //我们现在需要先把String类型的字符串,转为list类型的数据,因为数据都是{key,value}形式的
            List properties = JSONArray.parseArray(propertiesList, Map.class);
    //开始进入for循环
            for (int i = 0; i < properties.size(); i++) {
                Map propertie = properties.get(i);
//下面都是在循环中判断取得的值是否为我们需要的数据,所以使用了if,如果是则直接获取该key的value值然后传值
                if (FcsPropertyNameConstants.PROPERTY_PROPTABENAME.equals(propertie.get("code"))) {
                    tableName = propertie.get("value").toString();
​
                }
                if (FcsPropertyNameConstants.PROPERTY_PROPTABELABEL.equals(propertie.get("code"))) {
                    tableLabel = propertie.get("value").toString();
                }
                if (FcsPropertyNameConstants.PROPERTY_PROPBT.equals(propertie.get("code"))) {
                    propBT = (Boolean) propertie.get("value");
                }
                if (FcsPropertyNameConstants.PROPERTY_ISSHOW.equals(propertie.get("code"))) {
                    isShow = (Boolean) propertie.get("value");
                }
                if (FcsPropertyNameConstants.PROPERTY_PROPWIDTH.equals(propertie.get("code"))) {
                    propWidth = (String) propertie.get("value");
                }
                if (FcsPropertyNameConstants.PROPERTY_PROPTYPE.equals(propertie.get("code"))) {
                    PropType propType = new PropType();
                    propType.setValue(propertie.get("value").toString());
                    propType.setAttr(propertie.get("attr").toString());
                    propType.setType(propertie.get("type").toString());
                    propSubColumn.setPropType(propType);
                }
                if (FcsPropertyNameConstants.PROPERTY_PROPRREADONLY.equals(propertie.get("code"))) {
                    PropReadOnly propReadOnly = new PropReadOnly();
                    propReadOnly.setCal(propertie.get("cal").toString());
                    propReadOnly.setValue((Boolean) propertie.get("value"));
                    propSubColumn.setPropReadOnly(propReadOnly);
                }
                if (FcsPropertyNameConstants.PROPERTY_PROPSUBTABLEID.equals(propertie.get("code"))) {
                    PropSubTableId propSubTId = new PropSubTableId();
                    propSubTId.setIndex(propertie.get("index").toString());
                    propSubTId.setValue(propertie.get("value").toString());
                    propSubColumn.setPropSubTableId(propSubTId);
                }
​
            }
            propSubColumn.setTableName(tableName);
            propSubColumn.setPropBT(propBT);
            propSubColumn.setTableLabel(tableLabel);
            propSubColumn.setShow(isShow);
            propSubColumn.setPropWidth(propWidth);
//这个是如果一开始数据为空时的必要操作
        } else {
            propSubColumn.setTableName("");
            propSubColumn.setTableLabel("");
            propSubColumn.setShow(true);
            propSubColumn.setPropWidth("");
            propSubColumn.setPropType(null);
            propSubColumn.setPropReadOnly(null);
            propSubColumn.setPropSubTableId(null);
        }
            return propSubColumn;
    }
}
​

为转化后的xml:

                
                    
                        68c01e156ef77e07918cf3160adbe7f3
                        
                        false
                        tableHead2
                        名称
                        true
                        
                        
                        false
                        d8be1d4dffcf7944ee5a7bfc7dc0f789
                    
                

该笔记不完整的,只是记录了json数据字符串携带的值,我们该从for循环中如何取出来,然后传值;json数据是从数据库中取出的数据生成的,本人工作笔记!!!然后,为什么要转为xml呢?因为公司的一个表单项目,我们要实现表单的导入、导出功能!导出给用户的需要的是xml结构的数据文件,方便我们读取的时候能逐个xml结构读取数据,xml的读取导入、导出使用JAXB,java原生自带的工具类,贴上使用的代码:我们使用的是这个方法: public static void convertToXml(Object obj, Writer writer) {

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.*;


/**
 * 封装了XML转换成object,object转换成XML的代码
 *
 * @author hongkaiqing
 */
public class XmlUtil {
    /**
     * 将对象直接转换成String类型的 XML输出
     *
     * @param obj
     * @return
     */
    public static String convertToXml(Object obj) {
        // 创建输出流
        StringWriter sw = new StringWriter();
        try {
            // 利用jdk中自带的转换类实现
            JAXBContext context = JAXBContext.newInstance(obj.getClass());

            Marshaller marshaller = context.createMarshaller();
            // 格式化xml输出的格式
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
                    Boolean.TRUE);
            // 将对象转换成输出流形式的xml
            marshaller.marshal(obj, sw);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return sw.toString();
    }

    /**
     * 将对象根据路径转换成xml文件
     *
     * @param obj
     * @param writer
     * @return
     */
    public static void convertToXml(Object obj, Writer writer) {
        try {
            // 利用jdk中自带的转换类实现
            JAXBContext context = JAXBContext.newInstance(obj.getClass());
            Marshaller marshaller = context.createMarshaller();

            // 格式化xml输出的格式
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
                    Boolean.TRUE);
            // 是否省略xm头声明信息
            marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
            // 将对象转换成输出流形式的xml
            // 创建输出流
            marshaller.marshal(obj, writer);

        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }

    @SuppressWarnings("unchecked")
    /**
     * 将String类型的xml转换成对象
     */
    public static Object convertXmlStrToObject(Class clazz, String xmlStr) {
        Object xmlObject = null;
        try {
            JAXBContext context = JAXBContext.newInstance(clazz);
            // 进行将Xml转成对象的核心接口
            Unmarshaller unmarshaller = context.createUnmarshaller();
            StringReader sr = new StringReader(xmlStr);
            xmlObject = unmarshaller.unmarshal(sr);

        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return xmlObject;
    }

    @SuppressWarnings("unchecked")
    /**
     * 将file类型的xml转换成对象
     */
    public static Object convertXmlFileToObject(Class clazz, Reader reader) {
        Object xmlObject = null;
        try {
            JAXBContext context = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = context.createUnmarshaller();
//            FileReader fr = null;
//            try {
//                fr = new FileReader(xmlPath);
//            } catch (FileNotFoundException e) {
//                e.printStackTrace();
//            }
            xmlObject = unmarshaller.unmarshal(reader);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return xmlObject;
    }
}

然后就可以根据实际开发运用啦

你可能感兴趣的:(javaWeb,java,java,spring)