Xin lưu ý rằng JSONObject.get()
có thể trả về một số nguyên là một trong hai java.lang.Integer
hoặc java.lang.Long
, ví dụ, cho {a:3,b:100300000000}
chúng ta thấy
D/+++ (5526): +++a=>class java.lang.Integer:3
D/+++ (5526): +++b=>class java.lang.Long:100300000000
tôi sử dụng mã tương tự (lưu ý rằng chúng sử dụng các loại long
và double
thay vì int
và float
và trong nhiệm vụ của tôi có thể có không có lồng nhau JSONObject
hoặc JSONArray
để chúng không được hỗ trợ):
for (String k : new AsIterable<String>(json.keys())) {
try {
Object v = json.get(k);
//Log.d("+++","+++"+k+"=>"+v.getClass()+":"+v);
if (v instanceof Integer || v instanceof Long) {
long intToUse = ((Number)v).longValue();
...
} else if (v instanceof Boolean) {
boolean boolToUse = (Boolean)v).booleanValue();
...
} else if (v instanceof Float || v instanceof Double) {
double floatToUse = ((Number)v).doubleValue();
...
} else if (JSONObject.NULL.equals(v)) {
Object nullToUse = null;
...
} else {
String stringToUse = json.getString(k);
...
}
} catch (JSONException e2) {
// TODO Auto-generated catch block
Log.d("exc: "+e2);
e2.printStackTrace();
}
}
nơi AsIterable
cho phép chúng ta sử dụng for(:)
vòng lặp với một iterator và được định nghĩa là:
public class AsIterable<T> implements Iterable<T> {
private Iterator<T> iterator;
public AsIterable(Iterator<T> iterator) {
this.iterator = iterator;
}
public Iterator<T> iterator() {
return iterator;
}
}
Nếu bạn muốn kiểm soát nhiều hơn JSON phân tích, sử dụng một số phân tích cú pháp khác hơn 'org.json', chẳng hạn như Jackson. – laalto