我在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
}
]
}
答案 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保存所有细节