如何使用具有相同键的不同数据类型的改进来解析json对象数组

时间:2016-11-02 06:59:03

标签: android json gson retrofit

我在API响应中获取了一个json数组,它在同一个键()中有不同的数据类型(String,Integer和Array),但在使用Retrofit解析它们时出错:

{
 "custom_attributes": [
    {
      "attribute_code": "description",
      "value": "<p>Product Features:</p>\r\n<ul>\r\n<li>100% cotton</li>\r\n<li>Round neck</li>\r\n<li>Short sleeve</li>\r\n<li>Plastisol printing technique</li>\r\n<li>Small label on side of sleeve</li>\r\n</ul>"
    },
    {
      "attribute_code": "short_description",
      "value": "<p>100% cotton round neck short sleeve tee with plastisol printing technique</p>"
    },
    {
      "attribute_code": "category_ids",
      "value": [
          "3",
          "125"
       ]
    },
    {
      "attribute_code": "special_price",
      "value": true
    },
    {
      "attribute_code": "size",
      "value": 4
    }
  ]
}

2 个答案:

答案 0 :(得分:0)

我无法理解保持这样的JSON格式的必要性。

根据json.org:

JSON基于两种结构:

•名称/值对的集合。在各种语言中,这被实现为对象,记录,结构,字典,哈希表,键控列表或关联数组。

•有序的值列表。在大多数语言中,这被实现为数组,向量,列表或序列。

告诉我你的要求我将更新你的JSON,一旦你开始从erver获得更新的JSON,这个问题就会得到解决。

答案 1 :(得分:0)

首先以字符串形式存储响应

   String response =apiresponse;

然后在没有任何第三方的情况下尝试解析这个问题

从字符串响应中获取jsonobject

JSONObject object=new JSONObject(response);

从json对象获取jsonarray

JSONArray jsonArray=object.getJSONArray("custom_attributes");

迭代json数组直到其长度

for(int i=0;i<jsonArray.length;i++){

JSONObject newobject=jsonArray.getJSONObject(i);
Boolean valueBoolean;
String valueString;
String attribute_code=newObject.getString("attribute_code");
Object value=newObject.get("value");// get **value** key data in object

现在检查

的数据类型
if(value instanceof String){
valueString=value.toString(); //if value found string store in in value String 
}else if(value instanceof Boolean){
valueBoolean=(Boolean)value; //if value found Boolean store it in valueBoolean
}

}

在上一篇文章中,你可以简单地创建一个自定义arraylist并使用datatype key保存所有细节