Java中的Json数据解码

时间:2014-08-23 00:56:25

标签: java json jsonobject

我正在尝试使用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();
            }
        }

但它不适合我:(,任何线索?

2 个答案:

答案 0 :(得分:0)

使用方法getNames()获取JSON对象的所有键(字段名称)。

JSONObject api

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);
                    }
            }
    }