我正在尝试使用http://developer.edmunds.com/从https://api.edmunds.com/v1/api/toolsrepository/vindecoder?vin=1GCEC19C17Z275639&fmt=json&api_key=my_api_key找到一些vin数据....我正在获取完整的json数据。我正在使用simplest way to read json from a URL in java JSONParser,我的返回数据看起来像http://pastebin.com/30jXEGvN。
从jsonobject打印所有键及其值的最佳方法是什么?
我试过
Iterator<?> keys = object.keys();
while( keys.hasNext() ){
String key = (String)keys.next();
try {
if( object.get(key) instanceof JSONObject ){
detailsTextOut.append(key);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但它不适合我:(,任何线索?
答案 0 :(得分:0)
使用方法getNames()
获取JSON对象的所有键(字段名称)。
String[] keys = JSONObject.getNames(jsonObject);
for (String key : keys) {
//then get value by key (field name)
Object obj = jsonObject.get(key);
System.out.println(key + "-" + obj.toString());
}
答案 1 :(得分:0)
使用Jackson ObjectMapper:
String s = "replace_with_your_json_string";
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> values = (Map<String, Object>) mapper.readValue(s, Map.class);
iterate(values, "");
private void iterate(Map<String, Object> map, String indent) {
for(Map.Entry<String, Object> o : map.entrySet()) {
System.out.println(indent + o.getKey());
if(o.getValue() instanceof Map) {
iterate((Map<String, Object>) o.getValue(), indent + "\t");
}
if(o.getValue() instanceof List) {
iterate((List<Object>) o.getValue(), indent + "\t");
}
else if(o.getValue() instanceof String) {
System.out.println(indent + "\t" + o.getValue());
}
else if(o.getValue() instanceof Number) {
System.out.println(indent + "\t" + o.getValue());
}
}
}
private void iterate(List<Object> list, String indent) {
for(Object o : list) {
if(o instanceof Map) {
iterate((Map<String, Object>) o, indent + "\t");
}
if(o instanceof List) {
iterate((List<Object>) o, indent + "\t");
}
else if(o instanceof String) {
System.out.println(indent + "\t" + o);
}
else if(o instanceof Number) {
System.out.println(indent + "\t" + o);
}
}
}