需要帮助这个奇怪的JSON

时间:2014-09-05 10:56:40

标签: android 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":"nob@gmail.com",
            "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);

2 个答案:

答案 0 :(得分:1)

您说您使用的是GSON,在这种情况下,JsonArrayJsonObject都是JsonElement的子类。

但是你没有说你是否在GSON中使用DOM或Streaming技术。

您应该显示您的解析代码,或者自动用于解析的类。

与此同时,根据您的说法,我会在班级中将shippedTo字段定义为Object。这应该正确解析(如果使用DOM),之后您可以准确分析该字段中的内容。

而不是:

  private MyCountryType shippedTo;

有:

  private Object shippedTo;

答案 1 :(得分: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();

希望你能得到一般的想法。