Uwaga JSONObject.get()
może zwrócić liczbę całkowitą albo jako java.lang.Integer
lub java.lang.Long
, na przykład, dla {a:3,b:100300000000}
widzimy
D/+++ (5526): +++a=>class java.lang.Integer:3
D/+++ (5526): +++b=>class java.lang.Long:100300000000
użyć kodu podobnego (zauważmy, że używamy rodzajów long
i double
zamiast int
i float
, a moim zadaniem nie może być nie zagnieżdżony JSONObject
lub JSONArray
więc oni nie są obsługiwane):
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();
}
}
gdzie AsIterable
pozwala nam korzystać z pętli for(:)
z iteratora i jest zdefiniowany jako:
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;
}
}
Jeśli chcesz mieć większą kontrolę nad JSON parsowania, użyć innej składni niż 'org.json', takich jak Jackson. – laalto