就很簡單的一個問題折磨了整整一天,好在壓抑的心情終於釋放了,終於閑下來覺得是不是應該記錄一下。
首先這個json串是從外網接口返回的數據,想要了解的朋友們可以復制到json解析器中看一下格式:https://www.json.cn/#
{"status":"True","biz_result":[{"PartyFunctionCode":"NBEPORT","PartyIdentifier":"container","PartyName":"寧波電子口岸","ManifestInfo":[{"LadingBillNumber":"COSU6224023460B","ShippingCompanyName":"","VesselNameCode":"COSCO YINGKOU","VesselName":"COSCO YINGKOU","PlaceOfLoading":"","PlaceOfDischarge":"","VoyageNumber":"130W","DirectionCode":"","VesselCallNumber":"","IMONumber":""}],"ContainerInfo":[{"ContainerNumber":"FCIU9840537","ContainerOperator":"COS","SealNumber":"11374417","CodeOfSizeAndType":"","ContainerLoadingStatusCode":"","ContainerTareWeight":"0","TransportMeansType":"","VehicleNumber":"","ContainerStatusInformation":[{"ImExIdentifier":"","TransportStatusCode":"碼頭已經放行","TransportStatusNameEN":"","DateOrTimeOrPeriod":"2019-10-25 17:34:49","TimeZoneIdentifier":"PRC","PlaceLocationQualifier":"NBEPORT","PlaceOrLocationIdentification":"","PlaceOrLocation":"","Remark":"寧波電子口岸","Status":"DOCKPASS","EventName":""},{"ImExIdentifier":"E","TransportStatusCode":"重箱進港","TransportStatusNameEN":"","DateOrTimeOrPeriod":"2019-10-24 13:29:00","TimeZoneIdentifier":"PRC","PlaceLocationQualifier":"NBEPORT","PlaceOrLocationIdentification":"BLCT3","PlaceOrLocation":"北侖四期碼頭","Remark":"寧波電子口岸","Status":"INOUT","EventName":"進港"},{"ImExIdentifier":"E","TransportStatusCode":"海關放行","TransportStatusNameEN":"","DateOrTimeOrPeriod":"2019-10-25 11:04:37","TimeZoneIdentifier":"PRC","PlaceLocationQualifier":"NBEPORT","PlaceOrLocationIdentification":"","PlaceOrLocation":"","Remark":"寧波電子口岸","Status":"CUSPASS","EventName":"海關放行"},{"ImExIdentifier":"","TransportStatusCode":"27301 裝載艙單數據傳輸成功。","TransportStatusNameEN":"","DateOrTimeOrPeriod":"2019-10-31 13:44:41","TimeZoneIdentifier":"PRC","PlaceLocationQualifier":"NBEPORT","PlaceOrLocationIdentification":"","PlaceOrLocation":"","Remark":"寧波電子口岸","Status":"MFT","EventName":"裝載艙單"},{"ImExIdentifier":"E","TransportStatusCode":"重箱裝船","TransportStatusNameEN":"","DateOrTimeOrPeriod":"2019-11-01 16:13:00","TimeZoneIdentifier":"PRC","PlaceLocationQualifier":"NBEPORT","PlaceOrLocationIdentification":"BLCT3","PlaceOrLocation":"北侖四期碼頭","Remark":"寧波電子口岸","Status":"LOAD","EventName":"裝船"},{"ImExIdentifier":"","TransportStatusCode":"開船","TransportStatusNameEN":"","DateOrTimeOrPeriod":"2019-11-01 22:00:00","TimeZoneIdentifier":"PRC","PlaceLocationQualifier":"NBEPORT","PlaceOrLocationIdentification":"BLCT3","PlaceOrLocation":"北侖四期碼頭","Remark":"寧波電子口岸","Status":"BERTH","EventName":"離港"}]}]},{"PartyFunctionCode":"NBEPORT","PartyIdentifier":"container","PartyName":"寧波電子口岸","ManifestInfo":[{"LadingBillNumber":"COSU6224023460A","ShippingCompanyName":"","VesselNameCode":"COSCO YINGKOU","VesselName":"COSCO YINGKOU","PlaceOfLoading":"","PlaceOfDischarge":"","VoyageNumber":"130W","DirectionCode":"","VesselCallNumber":"","IMONumber":""}],"ContainerInfo":[{"ContainerNumber":"FCIU9840537","ContainerOperator":"COS","SealNumber":"11374417","CodeOfSizeAndType":"","ContainerLoadingStatusCode":"","ContainerTareWeight":"0","TransportMeansType":"","VehicleNumber":"","ContainerStatusInformation":[{"ImExIdentifier":"","TransportStatusCode":"碼頭已經放行","TransportStatusNameEN":"","DateOrTimeOrPeriod":"2019-10-25 17:34:49","TimeZoneIdentifier":"PRC","PlaceLocationQualifier":"NBEPORT","PlaceOrLocationIdentification":"","PlaceOrLocation":"","Remark":"寧波電子口岸","Status":"DOCKPASS","EventName":""},{"ImExIdentifier":"E","TransportStatusCode":"重箱進港","TransportStatusNameEN":"","DateOrTimeOrPeriod":"2019-10-24 13:29:00","TimeZoneIdentifier":"PRC","PlaceLocationQualifier":"NBEPORT","PlaceOrLocationIdentification":"BLCT3","PlaceOrLocation":"北侖四期碼頭","Remark":"寧波電子口岸","Status":"INOUT","EventName":"進港"},{"ImExIdentifier":"E","TransportStatusCode":"海關放行","TransportStatusNameEN":"","DateOrTimeOrPeriod":"2019-10-25 11:04:27","TimeZoneIdentifier":"PRC","PlaceLocationQualifier":"NBEPORT","PlaceOrLocationIdentification":"","PlaceOrLocation":"","Remark":"寧波電子口岸","Status":"CUSPASS","EventName":"海關放行"},{"ImExIdentifier":"","TransportStatusCode":"27301 裝載艙單數據傳輸成功。","TransportStatusNameEN":"","DateOrTimeOrPeriod":"2019-10-31 13:44:41","TimeZoneIdentifier":"PRC","PlaceLocationQualifier":"NBEPORT","PlaceOrLocationIdentification":"","PlaceOrLocation":"","Remark":"寧波電子口岸","Status":"MFT","EventName":"裝載艙單"},{"ImExIdentifier":"E","TransportStatusCode":"重箱裝船","TransportStatusNameEN":"","DateOrTimeOrPeriod":"2019-11-01 16:13:00","TimeZoneIdentifier":"PRC","PlaceLocationQualifier":"NBEPORT","PlaceOrLocationIdentification":"BLCT3","PlaceOrLocation":"北侖四期碼頭","Remark":"寧波電子口岸","Status":"LOAD","EventName":"裝船"}]}]}],"error":""}
期間用了alibab的fastjson包想要一層一層剝開這個json,結果浪費了許多時間還是沒有效果,估計是方法使用錯了,這里就直接貼上成功的方法。
首先還是先建了實體類,這里比較簡單,就是按照json的格式一層一層往下寫,就直接貼代碼了。(getset和構造器我就不貼了,有點太占空間了)
1 import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 2 import java.io.Serializable; 3 import java.util.List; 4 5 @JsonIgnoreProperties(ignoreUnknown = true) 6 @SuppressWarnings("serial") 7 public class Result implements Serializable { 8 9 private String status; 10 private List<biz_result> biz_result; 11 private String error;
1 import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 2 import java.io.Serializable; 3 import java.util.List; 4 5 @JsonIgnoreProperties(ignoreUnknown = true) 6 @SuppressWarnings("serial") 7 public class biz_result implements Serializable { 8 private String PartyFunctionCode; 9 private String PartyIdentifier; 10 private String PartyName; 11 private List<ManifestInfo> ManifestInfo ; 12 private List<ContainerInfo> ContainerInfo ;
1 import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 2 import java.io.Serializable; 3 4 @JsonIgnoreProperties(ignoreUnknown = true) 5 @SuppressWarnings("serial") 6 public class ManifestInfo implements Serializable { 7 private String LadingBillNumber; 8 private String ShippingCompanyName; 9 private String VesselNameCode; 10 private String VesselName; 11 private String PlaceOfLoading; 12 private String PlaceOfDischarge; 13 private String VoyageNumber; 14 private String DirectionCode; 15 private String VesselCallNumber; 16 private String IMONumber;
1 import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 2 import java.io.Serializable; 3 import java.util.List; 4 5 @JsonIgnoreProperties(ignoreUnknown = true) 6 @SuppressWarnings("serial") 7 public class ContainerInfo implements Serializable { 8 9 private String ContainerNumber; 10 private String ContainerOperator; 11 private String SealNumber; 12 private String CodeOfSizeAndType; 13 private String ContainerLoadingStatusCode; 14 private String ContainerTareWeight; 15 private String TransportMeansType; 16 private String VehicleNumber; 17 private List<ContainerStatusInformation> ContainerStatusInformation ;
1 import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 2 import java.io.Serializable; 3 4 @JsonIgnoreProperties(ignoreUnknown = true) 5 @SuppressWarnings("serial") 6 public class ContainerStatusInformation implements Serializable { 7 8 private String ImExIdentifier; 9 private String TransportStatusCode; 10 private String TransportStatusNameEN; 11 private String DateOrTimeOrPeriod; 12 private String TimeZoneIdentifier; 13 private String PlaceLocationQualifier; 14 private String PlaceOrLocationIdentification; 15 private String PlaceOrLocation; 16 private String Remark; 17 private String Status; 18 private String EventName;
才想起來要不要折疊一下,這會不會太長了,但是我實在太懶了,對不起我就不去重新操作了。
實體類建完以后我就嘗試了一下,也不再使用alibab的fastjson,使用如下這個包:
import net.sf.json.JSONObject;
maven依賴如下:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
最終代碼如下:
1 import net.sf.json.JSONArray; 2 import net.sf.json.JSONObject; 3 4 public class Test02 { 5 6 public static void main(String[]args){ 7 8 String json = "這是上面巨長的JSON"; 9 10 //得到json對象 11 JSONObject jsonObject = JSONObject.fromObject(json); 12 //獲取其中的biz_result數組 13 JSONArray biz_result = jsonObject.getJSONArray("biz_result"); 14 //獲取數組中的某位元素 15 String biz_resultString = biz_result.getString(0); 16 //將數組中的這個數組再次轉換成json對象 17 JSONObject jsonObject1 = JSONObject.fromObject(biz_resultString); 18 //通過getString獲取value 19 String manifestInfo = jsonObject1.getString("ManifestInfo"); 20 //去除首位中括號得到json格式 21 String substring = manifestInfo.substring(1); 22 String subString = substring.substring(0,substring.length()-1); 23 //得到json格式以后再轉換成json對象 24 JSONObject jb3 = JSONObject.fromObject(subString); 25 //得到需要的值。 26 String vesselName = jb3.getString("VesselName"); 27 System.out.println(vesselName); 28 29 } 30 }
還是得養成寫注釋的習慣,要是不寫注釋貼上來,我自己都看着不舒服,最終得到了需要的數據:
COSCO YINGKOU
1234567.
