【问题标题】:creating Hashmap from a JSON String从 JSON 字符串创建 Hashmap
【发布时间】:2014-03-27 11:58:48
【问题描述】:

在java中从一个json字符串创建一个hashmap?

我有像 {"phonetype":"N95","cat":"WP"} 这样的 json 字符串,想转换成标准的 Hashmap。

我该怎么做?

【问题讨论】:

标签: java android json hashmap


【解决方案1】:

解析 JSONObject 并创建 HashMap

public static void jsonToMap(String t) throws JSONException {

        HashMap<String, String> map = new HashMap<String, String>();
        JSONObject jObject = new JSONObject(t);
        Iterator<?> keys = jObject.keys();

        while( keys.hasNext() ){
            String key = (String)keys.next();
            String value = jObject.getString(key); 
            map.put(key, value);

        }

        System.out.println("json : "+jObject);
        System.out.println("map : "+map);
    }

测试输出:

json : {"phonetype":"N95","cat":"WP"}
map : {cat=WP, phonetype=N95}

【讨论】:

  • 请指定您使用的库,json-simple 中的 JSONObject 没有方法 keys()getString()
  • @VinothkumarArputharaj 当我将类似的 json 字符串转换为 JSONObject 时,它会以随机顺序转换。如何以相同的顺序将 json 字符串转换为 json obects??
  • 你可以使用 Gson 库
【解决方案2】:

您可以使用 Google 的 Gson 库将 json 转换为 Hashmap。试试下面的代码

String jsonString = "Your JSON string";
HashMap<String,String> map = new Gson().fromJson(jsonString, new TypeToken<HashMap<String, String>>(){}.getType());

【讨论】:

  • 正在寻找这个。谢谢。你能解释一下TypeToken&lt;HashMap&lt;String, String&gt;&gt;(){}.getType()
【解决方案3】:
public class JsonMapExample {

    public static void main(String[] args) {
        String json = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
        Map<String, String> map = new HashMap<String, String>();
        ObjectMapper mapper = new ObjectMapper();

        try {
            //convert JSON string to Map
            map = mapper.readValue(json, new TypeReference<HashMap<String, String>>() {});
            System.out.println(map);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出:

{phonetype=N95, cat=WP}

你可以看到这个链接很有帮助http://www.mkyong.com/java/how-to-convert-java-map-to-from-json-jackson/

【讨论】:

  • org.codehaus.jackson?还在使用 Jackson 1.9.x? ;)
【解决方案4】:

你可以使用Gson

Type type = new TypeToken<HashMap<String, String>>() {}.getType();
new Gson().fromJson(jsonString, type);

【讨论】:

    【解决方案5】:

    这个操作很简单,不需要使用任何外部库。

    你可以改用这个类:)(处理偶数列表、嵌套列表和json)

    public class Utility {
    
        public static Map<String, Object> jsonToMap(Object json) throws JSONException {
    
            if(json instanceof JSONObject)
                return _jsonToMap_((JSONObject)json) ;
    
            else if (json instanceof String)
            {
                JSONObject jsonObject = new JSONObject((String)json) ;
                return _jsonToMap_(jsonObject) ;
            }
            return null ;
        }
    
    
       private static Map<String, Object> _jsonToMap_(JSONObject json) throws JSONException {
            Map<String, Object> retMap = new HashMap<String, Object>();
    
            if(json != JSONObject.NULL) {
                retMap = toMap(json);
            }
            return retMap;
        }
    
    
        private static Map<String, Object> toMap(JSONObject object) throws JSONException {
            Map<String, Object> map = new HashMap<String, Object>();
    
            Iterator<String> keysItr = object.keys();
            while(keysItr.hasNext()) {
                String key = keysItr.next();
                Object value = object.get(key);
    
                if(value instanceof JSONArray) {
                    value = toList((JSONArray) value);
                }
    
                else if(value instanceof JSONObject) {
                    value = toMap((JSONObject) value);
                }
                map.put(key, value);
            }
            return map;
        }
    
    
        public static List<Object> toList(JSONArray array) throws JSONException {
            List<Object> list = new ArrayList<Object>();
            for(int i = 0; i < array.length(); i++) {
                Object value = array.get(i);
                if(value instanceof JSONArray) {
                    value = toList((JSONArray) value);
                }
    
                else if(value instanceof JSONObject) {
                    value = toMap((JSONObject) value);
                }
                list.add(value);
            }
            return list;
        }
    }
    

    要将您的 JSON 字符串转换为 hashmap,请使用:

    HashMap<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(response)) ;
    

    【讨论】:

    • 这比接受的答案要好得多,因为它处理嵌套和复杂的对象。帮了我很多:)
    【解决方案6】:
    HashMap<String, Object> map = new Gson().fromJson(jsonString, HashMap.class);
    

    试试这个

    【讨论】:

      【解决方案7】:
      HashMap<String, String> hashMap = new HashMap<String, String>();
      String string = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
      
      try {
          JSONObject json = new JSONObject(string);
      
          hashMap.put("phonetype", json.getString("phonetype"));
          hashMap.put("cat", json.getString("cat"));
      } catch (JSONException e) {
           // TODO Handle expection!
      }
      

      【讨论】:

      • 请不要使用空的 catch 块。
      • 这个方案只适用于{"phonetype":"N95","cat":"WP"},应该是通用的。
      • Catch 块不是这里的重点,所以我同意 - 将它们留空以专注于实际逻辑
      【解决方案8】:

      我建议不要自己这样做。
      使用图书馆,例如来自 Google 的 Gson 库。

      https://code.google.com/p/google-gson/

      【讨论】:

        【解决方案9】:

        考虑这个json字符串

        {
            "12": [
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/12/12_960x540_200k.mp4/manifest.mpd",
                    "video_bitrate": "200k",
                    "audio_bitrate": "32k",
                    "video_width": 960,
                    "video_height": 540,
                    "file_size": 125465600
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/12/12_960x540_80k.mp4/manifest.mpd",
                    "video_bitrate": "80k",
                    "audio_bitrate": "32k",
                    "video_width": 960,
                    "video_height": 540,
                    "file_size": 50186240
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/12/12_640x360_201k.mp4/manifest.mpd",
                    "video_bitrate": "201k",
                    "audio_bitrate": "32k",
                    "video_width": 640,
                    "video_height": 360,
                    "file_size": 145934731
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/12/12_640x360_199k.mp4/manifest.mpd",
                    "video_bitrate": "199k",
                    "audio_bitrate": "32k",
                    "video_width": 640,
                    "video_height": 360,
                    "file_size": 145800030
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/12/12_640x360_79k.mp4/manifest.mpd",
                    "video_bitrate": "79k",
                    "audio_bitrate": "32k",
                    "video_width": 640,
                    "video_height": 360,
                    "file_size": 71709477
                }
            ],
            "13": [
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/13/13_960x540_200k.mp4/manifest.mpd",
                    "video_bitrate": "200k",
                    "audio_bitrate": "32k",
                    "video_width": 960,
                    "video_height": 540,
                    "file_size": 172902400
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/13/13_960x540_80k.mp4/manifest.mpd",
                    "video_bitrate": "80k",
                    "audio_bitrate": "32k",
                    "video_width": 960,
                    "video_height": 540,
                    "file_size": 69160960
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/13/13_640x360_201k.mp4/manifest.mpd",
                    "video_bitrate": "201k",
                    "audio_bitrate": "32k",
                    "video_width": 640,
                    "video_height": 360,
                    "file_size": 199932081
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/13/13_640x360_199k.mp4/manifest.mpd",
                    "video_bitrate": "199k",
                    "audio_bitrate": "32k",
                    "video_width": 640,
                    "video_height": 360,
                    "file_size": 199630781
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/13/13_640x360_79k.mp4/manifest.mpd",
                    "video_bitrate": "79k",
                    "audio_bitrate": "32k",
                    "video_width": 640,
                    "video_height": 360,
                    "file_size": 98303415
                }
            ],
            "14": [
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/14/14_960x540_200k.mp4/manifest.mpd",
                    "video_bitrate": "200k",
                    "audio_bitrate": "32k",
                    "video_width": 960,
                    "video_height": 540,
                    "file_size": 205747200
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/14/14_960x540_80k.mp4/manifest.mpd",
                    "video_bitrate": "80k",
                    "audio_bitrate": "32k",
                    "video_width": 960,
                    "video_height": 540,
                    "file_size": 82298880
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/14/14_640x360_201k.mp4/manifest.mpd",
                    "video_bitrate": "201k",
                    "audio_bitrate": "32k",
                    "video_width": 640,
                    "video_height": 360,
                    "file_size": 237769546
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/14/14_640x360_199k.mp4/manifest.mpd",
                    "video_bitrate": "199k",
                    "audio_bitrate": "32k",
                    "video_width": 640,
                    "video_height": 360,
                    "file_size": 237395552
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/14/14_640x360_79k.mp4/manifest.mpd",
                    "video_bitrate": "79k",
                    "audio_bitrate": "32k",
                    "video_width": 640,
                    "video_height": 360,
                    "file_size": 116885686
                }
            ],
            "15": [
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/15/15_960x540_200k.mp4/manifest.mpd",
                    "video_bitrate": "200k",
                    "audio_bitrate": "32k",
                    "video_width": 960,
                    "video_height": 540,
                    "file_size": 176128000
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/15/15_960x540_80k.mp4/manifest.mpd",
                    "video_bitrate": "80k",
                    "audio_bitrate": "32k",
                    "video_width": 960,
                    "video_height": 540,
                    "file_size": 70451200
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/15/15_640x360_201k.mp4/manifest.mpd",
                    "video_bitrate": "201k",
                    "audio_bitrate": "32k",
                    "video_width": 640,
                    "video_height": 360,
                    "file_size": 204263286
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/15/15_640x360_199k.mp4/manifest.mpd",
                    "video_bitrate": "199k",
                    "audio_bitrate": "32k",
                    "video_width": 640,
                    "video_height": 360,
                    "file_size": 204144447
                },
                {
                    "dash_url": "http://mediaserver.superprofs.com:1935/vods3/_definst_/mp4:amazons3/superprofs-media/private/lectures/15/15_640x360_79k.mp4/manifest.mpd",
                    "video_bitrate": "79k",
                    "audio_bitrate": "32k",
                    "video_width": 640,
                    "video_height": 360,
                    "file_size": 100454382
                }
            ]
        }
        

        使用杰克逊解析器

         private static ObjectMapper underScoreToCamelCaseMapper;
        
            static {
                final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
                underScoreToCamelCaseMapper = new ObjectMapper();
                underScoreToCamelCaseMapper.setDateFormat(df);
                underScoreToCamelCaseMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
                underScoreToCamelCaseMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
                underScoreToCamelCaseMapper.setPropertyNamingStrategy(
                        PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
        }
            public static <T> T parseUnderScoredResponse(String json, Class<T> classOfT) {
                try {
                    if (json == null) {
                        return null;
                    }
                    return underScoreToCamelCaseMapper.readValue(json, classOfT);
        
                } catch (JsonParseException e) {
                } catch (JsonMappingException e) {
                } catch (IOException e) {
                }
                return null;
            }
        

        使用以下代码解析

         HashMap<String, ArrayList<Video>> integerArrayListHashMap =
                        JsonHandler.parseUnderScoredResponse(test, MyHashMap.class);
        

        MyHashMap 在哪里

         private static class MyHashMap extends HashMap<String,ArrayList<Video>>{
            }
        

        【讨论】:

          【解决方案10】:

          没有 JSON 库,只有 String 和 HashMap。
          保持简单!
          希望它适合所有人。

          // JSON 转换为基于 String 的 HashMap 示例

              String tempJson = "{\"incomePhone\":\"213121122\",\"clientId\":\"1001\",\"clientAccountManager\":\"Gestor de Conta 1\",\"clientRetailBranch\":\"100\",\"phoneAccountManager\":\"7800100\"}";
              System.out.println(tempJson);
          
              String[] parts = tempJson.split(",");
              HashMap<String,String> jsonHash = new HashMap<String,String>();
          
              for(int i=0;i<parts.length;i++){
                  parts[i]    =   parts[i].replace("\"", "");
                  parts[i]    =   parts[i].replace("{", "");
                  parts[i]    =   parts[i].replace("}", "");
                  String[] subparts = parts[i].split(":");
                  jsonHash.put(subparts[0],subparts[1]);
              }
          

          【讨论】:

          • 这对于任何数组和可能的嵌套对象都会失败。
          【解决方案11】:
          public Map<String, String> parseJSON(JSONObject json, Map<String, String> dataFields) throws JSONException {
                  Iterator<String> keys = json.keys();
                  while (keys.hasNext()) {
                      String key = keys.next();
                      String val = null;
                      try {
                          JSONObject value = json.getJSONObject(key);
                          parseJSON(value, dataFields);
                      } catch (Exception e) {
                          if (json.isNull(key)) {
                              val = "";
                          } else {
                              try {
                                  val = json.getString(key);
                              } catch (Exception ex) {
                                  System.out.println(ex.getMessage());
                              }
                          }
                      }
          
                      if (val != null) {
                          dataFields.put(key, val);
                      }
                  }
                  return dataFields;
              }
          

          【讨论】:

            【解决方案12】:

            将 Json 解析为 HashMap 的最佳方法

            public static HashMap<String, String> jsonToMap(JSONObject json) throws JSONException {
                        HashMap<String, String> map = new HashMap<>();
                        try {
                            Iterator<String> iterator = json.keys();
            
                            while (iterator.hasNext()) {
                                String key = iterator.next();
                                String value = json.getString(key);
                                map.put(key, value);
                            }
            
                            return map;
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        return null;
                    }
            

            【讨论】:

              【解决方案13】:

              在 Java 中,我们可以使用以下语句来实现。我们需要使用 Jackson ObjectMapper 并提供 HashMap.class 作为映射类。最后将结果存储为 HashMap 对象。

              HashMap<String,String> hashMap = new ObjectMapper().readValue(jsonString, HashMap.class);
              

              【讨论】:

                【解决方案14】:

                这对我有用:

                JSONObject jsonObj = new JSONObject();
                jsonObj.put("phonetype","N95");
                jsonObj.put("cat","WP");
                

                jsonObj 到 Hashmap 如下使用 gson

                HashMap<String, Object> hashmap = new Gson().fromJson(jsonObj.toString(), HashMap.class);
                

                使用的包

                <dependencies>
                    <dependency>
                        <groupId>org.json</groupId>
                        <artifactId>json</artifactId>
                        <version>20180813</version>
                    </dependency>
                    <dependency>
                        <groupId>com.google.code.gson</groupId>
                        <artifactId>gson</artifactId>
                        <version>2.8.6</version>
                    </dependency>
                </dependencies>
                

                【讨论】:

                  【解决方案15】:

                  下面是一个简单的例子,它可以通过仅使用 JSON 简单库从 JSON 字符串创建 Hashmap:

                  {"Collection":{"Item_Type":"Any","Name":"A","Item_ID":"000014"},"Object_Name":"System"}

                  import java.io.FileReader;
                  import java.util.HashMap;
                  import java.util.Iterator; 
                  import java.util.Map;  
                  import org.json.simple.JSONObject; 
                  import org.json.simple.parser.*;
                  
                  public class JSONRead {
                  
                  public static void main(String[] args) throws Exception {
                      
                      Object obj = new JSONParser().parse(new FileReader("D:\\other.json"));
                      
                      HashMap<String,String> map =new HashMap<String,String>();
                      
                      // typecasting obj to JSONObject 
                      JSONObject jo = (JSONObject) obj;
                      
                      Map Item_Id = ((Map)jo.get("Collection"));
                              
                      Iterator<Map.Entry> itr1 = Item_Id.entrySet().iterator(); 
                      while (itr1.hasNext()) { 
                          Map.Entry pair = itr1.next(); 
                          String key = (String) pair.getKey();
                          String value = (String) pair.getValue();
                          System.out.println( pair.getKey() + " : " + pair.getValue()); 
                          map.put(key, value);
                      }
                      
                      System.out.println(map)
                      System.out.println(map.get("Item"));        
                  }
                  

                  【讨论】:

                    【解决方案16】:

                    您可以使用 Jackson 来执行此操作。我还没有找到一个简单的 Gson 解决方案。

                    data_map.json 是一个 JSON(对象)资源文件
                    data_list.json 是一个 JSON(数组)资源文件。

                    import java.io.File;
                    import java.io.IOException;
                    import java.net.MalformedURLException;
                    import java.net.URISyntaxException;
                    import java.net.URL;
                    import java.util.List;
                    import java.util.Map;
                    import java.util.Scanner;
                    
                    import com.fasterxml.jackson.core.JsonGenerationException;
                    import com.fasterxml.jackson.core.JsonParseException;
                    import com.fasterxml.jackson.core.JsonProcessingException;
                    import com.fasterxml.jackson.core.type.TypeReference;
                    import com.fasterxml.jackson.databind.JsonMappingException;
                    import com.fasterxml.jackson.databind.ObjectMapper;
                    
                    /**
                     * Based on:
                     * 
                     * http://www.mkyong.com/java/how-to-convert-java-map-to-from-json-jackson/
                     */
                    public class JsonLoader {
                        private static final ObjectMapper OBJ_MAPPER;
                        private static final TypeReference<Map<String,Object>> OBJ_MAP;
                        private static final TypeReference<List<Map<String,Object>>> OBJ_LIST;
                    
                        static {
                            OBJ_MAPPER = new ObjectMapper();
                            OBJ_MAP = new TypeReference<Map<String,Object>>(){};
                            OBJ_LIST = new TypeReference<List<Map<String,Object>>>(){};
                        }
                    
                        public static void main(String[] args) {
                            try {
                                System.out.println(jsonToString(parseJsonString(read("data_map.json", true))));
                                System.out.println(jsonToString(parseJsonString(read("data_array.json", true))));
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    
                        private static final Object parseJsonString(String jsonString) {
                            try {
                                if (jsonString.startsWith("{")) {
                                    return readJsonObject(jsonString);
                                } else if (jsonString.startsWith("[")) {
                                    return readJsonArray(jsonString);
                                }
                            } catch (JsonGenerationException e) {
                                e.printStackTrace();
                            } catch (JsonMappingException e) {
                                e.printStackTrace();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                    
                            return null;
                        }
                    
                        public static String jsonToString(Object json) throws JsonProcessingException {
                            return OBJ_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(json);
                        }
                    
                        private static final Map<String,Object> readJsonObject(String jsonObjectString) throws JsonParseException, JsonMappingException, IOException {
                            return OBJ_MAPPER.readValue(jsonObjectString, OBJ_MAP);
                        }
                    
                        private static final List<Map<String,Object>> readJsonArray(String jsonArrayString) throws JsonParseException, JsonMappingException, IOException {
                            return OBJ_MAPPER.readValue(jsonArrayString, OBJ_LIST);
                        }
                    
                        public static final Map<String,Object> loadJsonObject(String path, boolean isResource) throws JsonParseException, JsonMappingException, MalformedURLException, IOException {
                            return OBJ_MAPPER.readValue(load(path, isResource), OBJ_MAP);
                        }
                    
                        public static final List<Map<String,Object>> loadJsonArray(String path, boolean isResource) throws JsonParseException, JsonMappingException, MalformedURLException, IOException {
                            return OBJ_MAPPER.readValue(load(path, isResource), OBJ_LIST);
                        }
                    
                        private static final URL pathToUrl(String path, boolean isResource) throws MalformedURLException {
                            if (isResource) {
                                return JsonLoader.class.getClassLoader().getResource(path);
                            }
                    
                            return new URL("file:/" + path);
                        }
                    
                        protected static File load(String path, boolean isResource) throws MalformedURLException {
                            return load(pathToUrl(path, isResource));
                        }
                    
                        protected static File load(URL url) {
                            try {
                                return new File(url.toURI());
                            } catch (URISyntaxException e) {
                                return new File(url.getPath());
                            }
                        }
                    
                        public static String read(String path, boolean isResource) throws IOException {
                            return read(path, "UTF-8", isResource);
                        }
                    
                        public static String read(String path, String charset, boolean isResource) throws IOException {
                            return read(pathToUrl(path, isResource), charset);
                        }
                    
                        @SuppressWarnings("resource")
                        public static String read(URL url, String charset) throws IOException {
                            return new Scanner(url.openStream(), charset).useDelimiter("\\A").next();
                        }
                    }
                    

                    额外

                    这是Dheeraj Sachan 示例的完整代码。

                    import java.io.File;
                    import java.io.IOException;
                    import java.io.Serializable;
                    import java.net.MalformedURLException;
                    import java.net.URISyntaxException;
                    import java.net.URL;
                    import java.text.DateFormat;
                    import java.text.SimpleDateFormat;
                    import java.util.HashMap;
                    import java.util.Iterator;
                    import java.util.List;
                    import java.util.Map.Entry;
                    import java.util.Scanner;
                    
                    import com.fasterxml.jackson.annotation.JsonAutoDetect;
                    import com.fasterxml.jackson.annotation.PropertyAccessor;
                    import com.fasterxml.jackson.core.JsonParseException;
                    import com.fasterxml.jackson.databind.DeserializationFeature;
                    import com.fasterxml.jackson.databind.JsonMappingException;
                    import com.fasterxml.jackson.databind.ObjectMapper;
                    import com.fasterxml.jackson.databind.PropertyNamingStrategy;
                    
                    public class JsonHandler {
                        private static ObjectMapper propertyMapper;
                    
                        static {
                            final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    
                            propertyMapper = new ObjectMapper();
                            propertyMapper.setDateFormat(df);
                            propertyMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
                            propertyMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
                            propertyMapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
                        }
                    
                        private static class MyHashMap extends HashMap<String, List<Video>>{
                            private static final long serialVersionUID = 7023107716981734468L;
                        }
                    
                        private static class Video implements Serializable {
                            private static final long serialVersionUID = -446275421030765463L;
                    
                            private String dashUrl;
                            private String videoBitrate;
                            private String audioBitrate;
                            private int videoWidth;
                            private int videoHeight;
                            private long fileSize;
                    
                            @Override
                            public String toString() {
                                return "Video [url=" + dashUrl + ", video=" + videoBitrate + ", audio=" + audioBitrate
                                        + ", width=" + videoWidth + ", height=" + videoHeight + ", size=" + fileSize + "]";
                            }
                        }
                    
                        public static void main(String[] args) {
                            try {
                                HashMap<String, List<Video>> map = loadJson("sample.json", true);
                                Iterator<Entry<String, List<Video>>> lectures = map.entrySet().iterator();
                    
                                while (lectures.hasNext()) {
                                    Entry<String, List<Video>> lecture = lectures.next();
                    
                                    System.out.printf("Lecture #%s%n", lecture.getKey());
                    
                                    for (Video video : lecture.getValue()) {
                                        System.out.println(video);
                                    }
                                }
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    
                        public static <T> T parseUnderScoredResponse(String json, Class<T> classOfT) {
                            try {
                                if (json == null) {
                                    return null;
                                }
                                return propertyMapper.readValue(json, classOfT);
                    
                            } catch (JsonParseException e) {
                                e.printStackTrace();
                            } catch (JsonMappingException e) {
                                e.printStackTrace();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            return null;
                        }
                    
                        public static URL pathToUrl(String path, boolean isResource) throws MalformedURLException {
                            if (isResource) {
                                return JsonHandler.class.getClassLoader().getResource(path);
                            }
                    
                            return new URL("file:/" + path);
                        }
                    
                        public static File load(String path, boolean isResource) throws MalformedURLException {
                            return load(pathToUrl(path, isResource));
                        }
                    
                        public static File load(URL url) {
                            try {
                                return new File(url.toURI());
                            } catch (URISyntaxException e) {
                                return new File(url.getPath());
                            }
                        }
                    
                        @SuppressWarnings("resource")
                        public static String readFile(URL url, String charset) throws IOException {
                            return new Scanner(url.openStream(), charset).useDelimiter("\\A").next();
                        }
                    
                        public static String loadJsonString(String path, boolean isResource) throws IOException {
                            return readFile(path, isResource, "UTF-8");
                        }
                    
                        public static String readFile(String path, boolean isResource, String charset) throws IOException {
                            return readFile(pathToUrl(path, isResource), charset);
                        }
                    
                        public static HashMap<String, List<Video>> loadJson(String jsonString) throws IOException {
                            return JsonHandler.parseUnderScoredResponse(jsonString, MyHashMap.class);
                        }
                    
                        public static HashMap<String, List<Video>> loadJson(String path, boolean isResource) throws IOException {
                            return loadJson(loadJsonString(path, isResource));
                        }
                    }
                    

                    【讨论】:

                      猜你喜欢
                      • 2018-03-07
                      • 2012-12-18
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-01-16
                      • 1970-01-01
                      • 1970-01-01
                      • 2019-08-03
                      相关资源
                      最近更新 更多