2016-02-15 4 views
0
json = [{"a":"555","b":"ee"},{"a":"556","b":"rr"}] 

Я пробовал:Скрытое JSON HashMap в Java HashMap

ObjectMapper mapper = new ObjectMapper(); 
TypeReference<Map<String,String>> typeRef = new TypeReference<Map<String,String>>() {}; 
HashMap<String, String> result = mapper.readValue(json, typeRef); 

, но это не работает. Полагаю, это причина в том, что json - это список, а не один объект.

Фактически, если json был {"a":"555","b":"ee"}, он работает.

+0

см. Это http://stackoverflow.com/questions/443499/json-to-map –

+0

Не работает .... – Dave

+0

Это для андроида или обычной java? –

ответ

0

Чтобы решить проблему, я буду использовать Jackson SDK. Пожалуйста, загрузите последнюю версию с: http://wiki.fasterxml.com/JacksonDownload

JSON TO MAP Пример:

import java.io.IOException; 
import java.util.HashMap; 
import java.util.Map; 

import com.fasterxml.jackson.core.JsonGenerationException; 
import com.fasterxml.jackson.core.type.TypeReference; 
import com.fasterxml.jackson.databind.JsonMappingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 

public class JsonMapExample { 

    public static void main(String[] args) { 

     try { 

      ObjectMapper mapper = new ObjectMapper(); 
      String json = "{\"name\":\"mkyong\", \"age\":29}"; 

      Map<String, Object> map = new HashMap<String, Object>(); 

      // convert JSON string to Map 
      map = mapper.readValue(json, new TypeReference<Map<String, String>>(){}); 

      System.out.println(map); 

     } catch (JsonGenerationException e) { 
      e.printStackTrace(); 
     } catch (JsonMappingException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

Карта в формате JSON Пример:

import java.io.IOException; 
import java.util.HashMap; 
import java.util.Map; 

import com.fasterxml.jackson.core.JsonGenerationException; 
import com.fasterxml.jackson.databind.JsonMappingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 

public class MapJsonExample{ 

    public static void main(String[] args) { 

     try { 

      ObjectMapper mapper = new ObjectMapper(); 
      String json = ""; 

      Map<String, Object> map = new HashMap<String, Object>(); 
      map.put("name", "mkyong"); 
      map.put("age", 29); 

      // convert map to JSON string 
      json = mapper.writeValueAsString(map); 

      System.out.println(json); 

      json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map); 

      // pretty print 
      System.out.println(json); 

     } catch (JsonGenerationException e) { 
      e.printStackTrace(); 
     } catch (JsonMappingException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

JSONArray к HashMaps:

HashMap<String, String> pairs = new HashMap<String, String>(); 
for (int i = 0; i < myArray.length(); i++) { 
    JSONObject j = myArray.optJSONObject(i); 
    Iterator it = j.keys(); 
    while (it.hasNext()) { 
     String n = it.next(); 
     pairs.put(n, j.getString(n)); 
    } 
} 
+0

Я уже пробовал решение, предложенное mkyong. Как я сказал, с '{" a ":" 555 "," b ":" ee "}' работает, но с таким списком, как '[{" a ":" 555 "," b ":" ee "} , {"a": "556", "b": "rr"}] ' – Dave

+0

@DavideFruci Я добавил свой ответ, в основном ваш формат - jsonArray, поэтому вам придется разбирать его по-другому. См. JSONArray к HashMaps. Во время выполнения вы всегда можете проверить, является ли json JSONArray или JSONObject. сообщите мне, если он решит вашу проблему. –

+0

Avi Levinshtein, с myArray вы имеете в виду '[{" a ":" 555 "," b ":" ee "}, {" a ":" 556 "," b ":" rr "}]'? Для меня есть строка '' [{"a": "555", "b": "ee"}, {"a": "556", "b": "rr"}] "'. Поэтому мне нужно сначала преобразовать его из String в jsonArray, правильно? – Dave