我有JSON
{
"success": true,
"shippingMethod": [
{
"flat": {
"code": "flat.flat",
"title": "Flat Shipping Rate",
"cost": "5.00",
"tax_class_id": "9",
"text": "$5.00"
}
},
{
"zajil": {
"code": "zajil.zajil",
"title": "Zajil Shipping",
"cost": "26",
"tax_class_id": "0",
"text": "$26.00"
}
}
]
}
注意 object
中的每个真实array
都在一个没有名称的不必要的对象中,即上面代码中的flat
和zajil
是另一个对象。
我只需要那些嵌套对象flat
和zajil
中的数据。当我尝试这段代码时
JSONArray shippingMethods = response.optJSONArray("shippingMethod");
for (int i = 0; i < shippingMethods.length(); i++) {
JSONObject shippingObj = shippingMethods.optJSONObject(i);
JSONObject shippingMethod = shippingObj.optJSONObject("");
Iterator<?> keys = shippingObj.keys();
shippingMethod.optString("title");
shippingMethod.optString("cost");
}
我想我可以得到没有名字的Object
JSONObject shippingMethod = shippingObj.optJSONObject("");
但是当它从中获取内容时它不起作用并抛出NullPointerException
。然后我尝试iterate
keys
喜欢
Iterator<?> keys = shippingObj.keys();
它没有显示任何内容,因为此对象不直接包含任何键。所以我的问题是如何从上面title
获取所需的数据cost
和JSON
。
我无法更改JSON
,因为它是客户网站的默认结构。
任何帮助都将不胜感激。
答案 0 :(得分:1)
试试这样,可以帮到你
//get response
JSONObject jsonObject = new JSONObject("response");
//get status
boolean success = jsonObject.getBoolean("success");
if(success){
//get jsonarray from response
JSONArray shippingMethodArray = jsonObject.getJSONArray("shippingMethod");
//iterate array
for(int i=0; i<shippingMethodArray.length(); i++){
jsonObject = shippingMethodArray.getJSONObject(i);
//get all keys from jsonObject
List<String> allKeys = getAllKeys(jsonObject);
//iterate all keys
for(String key: allKeys) {
//get jsonObject by key
jsonObject = jsonObject.getJSONObject(key);
//get data
String title = jsonObject.getString("title");
String cost = jsonObject.getString("cost");
}
}
}else {
//do if not success...
}
//returns all keys from jsonobjects
private List<String> getAllKeys(JSONObject jsonObject) throws JSONException{
List<String> keys = new ArrayList<String>();
Iterator<?> iterator = jsonObject.keys();
while( iterator.hasNext() ) {
String key = (String)iterator.next();
keys.add(key);
}
return keys;
}
答案 1 :(得分:0)
如何访问没有名称
的对象内的JSON对象
所有对象都在您的JSON中有名称。
我只需要将这些嵌套对象中的数据变为flat和zajil。
flat
和zajil
是对象的名称。您碰巧不关心这些名称的事实并不意味着这些名称不存在。
如果您的JSON设置为每个对象只包含一个嵌套对象,请使用keys()
或names()
查找名称,然后按该名称检索对象。您正尝试按""
检索对象,flat
和zajil
都不是""
。
它没有显示任何内容,因为此对象不直接包含任何键
是的,确实如此。密钥分别为flat
和zajil
。
当i
为0
时,shippingMethods.optJSONObject(i)
将返回包含以下内容的JSONObject
:
{
"flat": {
"code": "flat.flat",
"title": "Flat Shipping Rate",
"cost": "5.00",
"tax_class_id": "9",
"text": "$5.00"
}
}
在keys()
上拨打JSONObject
将返回Iterator
;如果从中获得第一个值,则该值将为flat
。