Java的json解析单个找出指定节点 和 json格式数据快速解析生成实体类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36411874/article/details/88167270

目录

 

github测试项目地址:

* @方法一:通过解析json,并转存进去实体类

 * 方法二:不直接转实体类,通过层层提取节点提取数据


github详细测试项目地址:

https://github.com/Yellow213/ConvenienceTools

* @方法一:通过解析json,并转存进去实体类


 * 优点:自动解析,方便快捷,且维护性较好。
 * 缺点:那种方法是将所有的东西都要解析出来,其实好几个类压根没用用的,也就是说那几个类其实是垃圾类,但是如果不写,那么就会报错。

上代码:

import com.dist.model.*;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

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

/**
 * @author hh
 * @date 2019/02/28
 * @方法一:通过解析json,并转存进去实体类
 * 优点:自动解析,方便快捷,且维护性较好。
 * 缺点:那种方法是将所有的东西都要解析出来,其实好几个类压根没用用的,也就是说那几个类其实是垃圾类,但是如果不写,那么就会报错。
 */
@RunWith(JUnit4.class)
public class DriverTestClass {
    @Test
    public void test01()throws Exception{
    	//(1)当获取到一条信息的时候,通过层层的解析,获得json数据
        String str ="{\"orderCode\":\"346\",\"userName\":\"136\",\"customerName\":\"小明\",\"provinceCode\":\"190\",\"cityCode\":\"000\",\"districtCode\":\"000\",\"customerAddress\":\"广东省广州市\",\"mobNum\":\"136\",\"orderSaleTime\":\"2019-02-01 23:04:26\",\"evaluationMark\":\"0\",\"invoiceHead\":\"小明\",\"orderTotalStatus\":\"30\",\"provinceName\":\"广东省\",\"cityName\":\"广州市\",\"districtName\":\"xX区\",\"sellerOrdRemark\":\"E3\",\"buyerOrdRemark\":\"\",\"invoiceType\":\"02\",\"invoice\":\"\",\"vatTaxpayerNumber\":\"\",\"registerAddress\":\"\",\"registerPhone\":\"\",\"bank\":\"\",\"account\":\"\",\"invoiceRecipientAddress\":\"\",\"invoiceRecipientName\":\"\",\"invoiceRecipientPhone\":\"\",\"invoiceRecipientHandPhone\":\"\",\"payType\":\"\",\"payTotalAmount\":\"\",\"needinvoiceflag\":\"Y\",\"isCanModifyTransportFee\":\"N\",\"guideAccountNo\":\"\",\"orderTime\":\"2019-02-01 23:02:53\",\"colorMarkFlags\":\"2\",\"phoneNum\":\"\",\"zipCode\":\"\",\"deliveryArea\":\"0200499\",\"detailAddress\":\"世外桃源\",\"countMoney\":\"490.00000\",\"sumDonationAmt\":\"0.00\",\"orderDetail\":[{\"productCode\":\"10668919671\",\"productName\":\"周生�?(CHOW SANG SANG)时尚黄金K金链18K金项�? 百搭素链 04800N18KY定价 40厘米\",\"unitPrice\":\"530.00000\",\"payAmount\":\"490.00000\",\"saleNum\":\"1.00000\",\"orderLineStatus\":\"30\",\"transportFee\":\"0.00000\",\"returnOrderFlag\":\"0\",\"coupontotalMoney\":\"40.00000\",\"vouchertotalMoney\":\"\",\"invCode\":\"\",\"orderLineNumber\":\"00662135679001\",\"itemCode\":\"04800N18KY-FJ-40-\",\"receivezipCode\":\"\",\"hwgFlag\":\"\",\"disType\":\"\",\"orderchannel\":\"MOBILE|01|01|7.4.2|20000\",\"prmtcode\":\"\",\"bLineNumber\":\"34662678213\",\"expresscompanycode\":\"E01\",\"expressno\":\"1154271476617\",\"phoneIdentifyCode\":\"\",\"payorderid\":\"\",\"packageorderid\":\"\",\"fpsdeliveryflag\":\"0\",\"activitytype\":\"\",\"reservedepositamount\":\"\",\"reservebalanceamount\":\"\",\"reservestatus\":\"\",\"mode\":\"\",\"itemTaxFare\":\"\",\"declareItemPrice\":\"\",\"declareItemTaxfare\":\"\",\"declareGoodsAmount\":\"\",\"carShopSerWay\":\"\",\"carShopCode\":\"\",\"carShopName\":\"\",\"carShopAddr\":\"\",\"carShopTel\":\"\",\"orderPayCode\":\"01\",\"dealPhoto\":\"http://sphss.suning.com/productspan/show.html?key=BkUDE9YNdQ4EkEshUJOTiAnYKNwU171TR5lXpgy%2F8UwpnL3SbTTXgW2LODzhNM7t\",\"isProsupplierDelivery\":\"0\",\"lpgOrderFlag\":\"\",\"serviceItemFlag\":\"0\",\"paymentList\":[{\"paycode\":\"6901\",\"banktypecode\":\"20001\",\"payamount\":\"30.00000\",\"offLinePayFlag\":\"\",\"alipayPayNo\":\"\"},{\"paycode\":\"6901\",\"banktypecode\":\"10006\",\"payamount\":\"10.00000\",\"offLinePayFlag\":\"\",\"alipayPayNo\":\"\"},{\"paycode\":\"6903\",\"banktypecode\":\"\",\"payamount\":\"0.01000\",\"offLinePayFlag\":\"\",\"alipayPayNo\":\"\"},{\"paycode\":\"4148\",\"banktypecode\":\"\",\"payamount\":\"489.99000\",\"offLinePayFlag\":\"\",\"alipayPayNo\":\"\"}],\"couponList\":[{\"coupontype\":\"8012\",\"sharelimit\":\"0.00000\"}],\"orderChannels\":[{\"orderChannelCode\":\"2\"}],\"activityTypes\":[],\"payTypes\":[],\"payerIdNumber\":\"\",\"payerCustomerName\":\"\",\"otoOrderType\":\"\",\"otoStoreCode\":\"\",\"otoStoreName\":\"\",\"expandAmount\":\"\",\"refVerifyCode\":\"\",\"orderServiceTypeMulti\":\"\",\"popContractInfo\":{},\"deliveryTime\":\"2019-02-02 13:33:52\",\"sendType\":\"1\",\"selfDeliveryName\":\"\",\"selfDeliveryMobile\":\"\",\"returnFlag\":\"\",\"complainFlag\":\"0\",\"logisticsOrderId\":\"E018\",\"carService\":{},\"orderTagList\":\"\",\"donationProjectInfo\":{\"donationProjectId\":\"\",\"donationAmt\":\"0.00\"}}]}";
        //(2)解析json数据,并把数据放到map里面
        JSONObject json = JSONObject.fromObject(str);
        Map classMap = new HashMap();
        classMap.put("orderDetail",OrderDetail.class);
        classMap.put("paymentList", Payment.class);
        classMap.put("couponList", Coupon.class);
        classMap.put("orderChannels", OrderChannel.class);
        classMap.put("donationProjectInfo",DonationProjectInfo.class);
        classMap.put("activityTypes", Object.class);
        //(3)这个作用是输出name和class
        JsonConfig config = new JsonConfig();
        config.setIgnoreDefaultExcludes(true);
        //(4)自动转化,塞进去实体类
        OrderGet orderGet = (OrderGet) JSONObject.toBean(json,OrderGet.class,classMap);
        //(5)通过实体类直接可以提取数据。十分方便快捷
        System.out.println("显示json中的数据:"+orderGet.getOrderDetail().get(0).getProductCode());
        System.out.println("显示最外层json中的数据:"+orderGet.getOrderCode()+","+orderGet.getOrderCode());
    }
}

输出结果:

实体类:(根据上边详细对应节点写上即可)

git地址:https://github.com/Yellow213/ConvenienceTools

 * 方法二:不直接转实体类,通过层层提取节点提取数据


 * 优点:按照需求去提取数据,不需要写多余无关的类,且不容易报错。(提取数据少的时候推荐使用)
 * 缺点:维护性较差,每次提取多一个节点数据,需要人工去写。

JSONObject obj = JSONObject.fromObject(json);
 System.out.println(obj.getString("orderCode"));

上代码:


import org.junit.Test;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class DirverTestClass2 {

/**
 * @author hh
 * @date 2019/02/28
 * @方法二:不直接转实体类,通过层层提取节点提取数据
 * 备注:
 * 方法一:那种方法是将所有的东西都要解析出来,其实好几个类压根没用用的,也就是说那几个类其实是垃圾类,但是如果不写,那么就会报错。
 * 方法二:
 * 优点:按照需求去提取数据,不需要写多余无关的类,且不容易报错。(提取数据少的时候推荐使用)
 * 缺点:维护性较差,每次提取多一个节点数据,需要人工去写。
 */
	@Test
	public void test() {
        String str ="{\"orderCode\":\"346\",\"userName\":\"136\",\"customerName\":\"小明\",\"provinceCode\":\"190\",\"cityCode\":\"000\",\"districtCode\":\"000\",\"customerAddress\":\"广东省广州市\",\"mobNum\":\"136\",\"orderSaleTime\":\"2019-02-01 23:04:26\",\"evaluationMark\":\"0\",\"invoiceHead\":\"小明\",\"orderTotalStatus\":\"30\",\"provinceName\":\"广东省\",\"cityName\":\"广州市\",\"districtName\":\"xX区\",\"sellerOrdRemark\":\"E3\",\"buyerOrdRemark\":\"\",\"invoiceType\":\"02\",\"invoice\":\"\",\"vatTaxpayerNumber\":\"\",\"registerAddress\":\"\",\"registerPhone\":\"\",\"bank\":\"\",\"account\":\"\",\"invoiceRecipientAddress\":\"\",\"invoiceRecipientName\":\"\",\"invoiceRecipientPhone\":\"\",\"invoiceRecipientHandPhone\":\"\",\"payType\":\"\",\"payTotalAmount\":\"\",\"needinvoiceflag\":\"Y\",\"isCanModifyTransportFee\":\"N\",\"guideAccountNo\":\"\",\"orderTime\":\"2019-02-01 23:02:53\",\"colorMarkFlags\":\"2\",\"phoneNum\":\"\",\"zipCode\":\"\",\"deliveryArea\":\"0200499\",\"detailAddress\":\"世外桃源\",\"countMoney\":\"490.00000\",\"sumDonationAmt\":\"0.00\",\"orderDetail\":[{\"productCode\":\"10668919671\",\"productName\":\"周生�?(CHOW SANG SANG)时尚黄金K金链18K金项�? 百搭素链 04800N18KY定价 40厘米\",\"unitPrice\":\"530.00000\",\"payAmount\":\"490.00000\",\"saleNum\":\"1.00000\",\"orderLineStatus\":\"30\",\"transportFee\":\"0.00000\",\"returnOrderFlag\":\"0\",\"coupontotalMoney\":\"40.00000\",\"vouchertotalMoney\":\"\",\"invCode\":\"\",\"orderLineNumber\":\"00662135679001\",\"itemCode\":\"04800N18KY-FJ-40-\",\"receivezipCode\":\"\",\"hwgFlag\":\"\",\"disType\":\"\",\"orderchannel\":\"MOBILE|01|01|7.4.2|20000\",\"prmtcode\":\"\",\"bLineNumber\":\"34662678213\",\"expresscompanycode\":\"E01\",\"expressno\":\"1154271476617\",\"phoneIdentifyCode\":\"\",\"payorderid\":\"\",\"packageorderid\":\"\",\"fpsdeliveryflag\":\"0\",\"activitytype\":\"\",\"reservedepositamount\":\"\",\"reservebalanceamount\":\"\",\"reservestatus\":\"\",\"mode\":\"\",\"itemTaxFare\":\"\",\"declareItemPrice\":\"\",\"declareItemTaxfare\":\"\",\"declareGoodsAmount\":\"\",\"carShopSerWay\":\"\",\"carShopCode\":\"\",\"carShopName\":\"\",\"carShopAddr\":\"\",\"carShopTel\":\"\",\"orderPayCode\":\"01\",\"dealPhoto\":\"http://sphss.suning.com/productspan/show.html?key=BkUDE9YNdQ4EkEshUJOTiAnYKNwU171TR5lXpgy%2F8UwpnL3SbTTXgW2LODzhNM7t\",\"isProsupplierDelivery\":\"0\",\"lpgOrderFlag\":\"\",\"serviceItemFlag\":\"0\",\"paymentList\":[{\"paycode\":\"6901\",\"banktypecode\":\"20001\",\"payamount\":\"30.00000\",\"offLinePayFlag\":\"\",\"alipayPayNo\":\"\"},{\"paycode\":\"6901\",\"banktypecode\":\"10006\",\"payamount\":\"10.00000\",\"offLinePayFlag\":\"\",\"alipayPayNo\":\"\"},{\"paycode\":\"6903\",\"banktypecode\":\"\",\"payamount\":\"0.01000\",\"offLinePayFlag\":\"\",\"alipayPayNo\":\"\"},{\"paycode\":\"4148\",\"banktypecode\":\"\",\"payamount\":\"489.99000\",\"offLinePayFlag\":\"\",\"alipayPayNo\":\"\"}],\"couponList\":[{\"coupontype\":\"8012\",\"sharelimit\":\"0.00000\"}],\"orderChannels\":[{\"orderChannelCode\":\"2\"}],\"activityTypes\":[],\"payTypes\":[],\"payerIdNumber\":\"\",\"payerCustomerName\":\"\",\"otoOrderType\":\"\",\"otoStoreCode\":\"\",\"otoStoreName\":\"\",\"expandAmount\":\"\",\"refVerifyCode\":\"\",\"orderServiceTypeMulti\":\"\",\"popContractInfo\":{},\"deliveryTime\":\"2019-02-02 13:33:52\",\"sendType\":\"1\",\"selfDeliveryName\":\"\",\"selfDeliveryMobile\":\"\",\"returnFlag\":\"\",\"complainFlag\":\"0\",\"logisticsOrderId\":\"E018\",\"carService\":{},\"orderTagList\":\"\",\"donationProjectInfo\":{\"donationProjectId\":\"\",\"donationAmt\":\"0.00\"}}]}";
        //(1)解析json数据,并把数据放到map里面
        JSONObject json = JSONObject.fromObject(str);
	    JSONObject obj = JSONObject.fromObject(json);
	    System.out.println(obj.getString("orderCode"));
	    System.out.println(obj.getString("userName"));
	    System.out.println(obj.getString("customerName"));
	    System.out.println(obj.getString("customerAddress"));
	    System.out.println(obj.getString("mobNum"));
	    System.out.println(obj.getString("orderSaleTime"));
	    System.out.println(obj.getString("orderTotalStatus"));
	    System.out.println(obj.getString("provinceCode"));
	    System.out.println(obj.getString("cityCode"));
	    System.out.println(obj.getString("districtName"));
	    System.out.println(obj.getString("sellerOrdRemark"));
	    //(2)解析下边一层,提取数组里面第一个json里面的节点
	    JSONArray json2 = json.getJSONArray("orderDetail");
	    JSONObject obj2 = JSONObject.fromObject(json2.get(0));
	    System.out.println("继续解析里面的一层,提取自己需要的数据");
	    System.out.println("obj2.getJSONObject(\"donationProjectInfo\").getString(\"donationAmt\"):"+obj2.getJSONObject("donationProjectInfo").getString("donationAmt"));
	    
	}

}

输出结果:

猜你喜欢

转载自blog.csdn.net/qq_36411874/article/details/88167270