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<Map>类型的数据,因为数据都是{key,value}形式的          
 List<Map> 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:
               <subColumns>                    <subColumn>                  
     <id>68c01e156ef77e07918cf3160adbe7f3</id>                      
 <parentCode></parentCode>                        <propBT>false</propBT>      
                 <tableName>tableHead2</tableName>                      
 <tableLabel>名称</tableLabel>                        <show>true</show>          
             <propWidth></propWidth>                        <propType
type="text" attr=""></propType>                        <propReadOnly
cal="">false</propReadOnly>                        <propSubTableId
index="2">d8be1d4dffcf7944ee5a7bfc7dc0f789</propSubTableId>                  
 </subColumn>                </subColumns>

该笔记不完整的,只是记录了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; } }
然后就可以根据实际开发运用啦

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信