2014-09-05 73 views
-1

我有一個JSON如下在這個奇怪的JSON需要幫助

{ 
    "shippingGroupListJson":[ 
     { 
     "lineId":123, 
     "shippedTo":{ 
      "country":"US" 
     }, 
     "cartons":1, 
     "group":"4", 
     "shipInscription":{ 
      "municipalInscription":"", 
      "inscriptionType":"", 
      "stateInscription":"", 
      "suframaInscriptionNumber":"", 
      "inscriptionBranch":"", 
      "contributorClass":"", 
      "inscriptionDigit":"", 
      "inscriptionNumber":"" 
     }, 
     "shipCartonDetails":[ 

     ], 
     "shippedContact":{ 
      "firstName":"Mjjkk", 
      "email":"[email protected]", 
      "fax":"--", 
      "phone":"80-121", 
      "lastName":"Henry" 
     }, 
     "mobilityShipStatus":"Not Yet Shipped", 
     "shipDate":"13 Dec 2014" 
     }, 
     { 
     "lineId":0, 
     "shippedTo":[ 

     ], 
     "cartons":0, 
     "group":"5", 
     "shipInscription":[ 

     ], 
     "shipCartonDetails":[ 

     ], 
     "shippedContact":[ 

     ], 
     "mobilityShipStatus":"", 
     "shipDate":"", 
     "shipStatus":"" 
     } 
    ] 
} 

如果在此關鍵「shippedTo」,見上JSON時有值,我得到一個JSON對象,當沒有值存在,然後我得到一個空白的JSONArray。

我需要解決這個問題。我無法與服務團隊溝通,因爲他們不會對其進行更改。任何人都可以告訴我如何進行所需的更改。

我知道這是不是儀式的方式,但我需要做的東西..

我嘗試使用String.replaceAll(oldChar,newChar);

+0

我想你可以簡單地嘗試獲得'shippedTo'鍵作爲一個JSONObject如果失敗(異常你需要檢查)回覆把它拿來作爲一個JSONArray。 – Luksprog 2014-09-05 11:04:27

+0

@Luksprog感謝您的回覆,但我正在使用gson庫來解析整個JSON。我不能改變這一點,因爲我在這裏發佈的json只是父級json的一小部分,還有更多的鍵。 – Nilesh 2014-09-05 11:09:06

+0

然後你需要使用你的初始方法來替換空的json數組返回。嘗試像這樣:'yourJSONResponseAsString.replaceAll(「\」shippedTo \「:\ [\ s *]」,「\」shippedTo \「:{}」);'用一個空的json對象替換json數組。 – Luksprog 2014-09-05 11:24:31

回答

1

你說你正在使用GSON,在這種情況下JsonArrayJsonObject是兩個子類JsonElement

但是,如果你使用的是DOM或流媒體技術與GSON你不說。

你應該表現出你的解析代碼,或者某個被自動用於解析類。

與此同時,根據你所說的,我會在我的課堂上將我的shippedTo字段定義爲Object。這應該解析正確(如果使用DOM),然後你可以準確地分析你在這個領域有什麼。

相反的:

private MyCountryType shippedTo; 

有:

private Object shippedTo; 
0

你可以簡單地在運行時即

JSONObject jsPar=new JSONObject(json_data); 
JSONArray jsarrPar=js.getJSONArray("shippingGroupListJson"); 


for(int i=0;i<jsarrPar.size();i++){ 
JSONObject js= jsarrPar.getJSONObject(i); 
if(js.get("shippedTo") instanceof JSONArray){ 
    //Treat it as an array 
    } 
    else{ 
    //Treat it as a single json object 
    } 
} 

檢查它的類型。此外,如果你需要它作爲一個JSONObject的無形它作爲一個單一的元素,然後做到這一點,讓您的自定義字符串

JSONObject jsPar=new JSONObject(json_data); 
    JSONArray jsarrPar=js.getJSONArray("shippingGroupListJson"); 


    for(int i=0;i<jsarrPar.size();i++){ 
    JSONObject js= jsarrPar.getJSONObject(i); 

    JSONObject js=new JSONObject(json_data); 
    if(js.get("shippedTo") instanceof JSONArray){ 
     js.put("shippedTo",new JSONObject()); //purge the original array with this new blank element 
    } 
    else{ 
     //Do your normal stuff  

    } 
} 
    String curmodstring=jsPar.toString(); 

希望你得到的總體思路。