我有一个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);
答案 0 :(得分:1)
您说您使用的是GSON,在这种情况下,JsonArray
和JsonObject
都是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();
希望你能得到一般的想法。