我使用Java,我有一个JSON字符串:

{
"name" : "abc" ,
"email id " : ["abc@gmail.com","def@gmail.com","ghi@gmail.com"]
}

然后是我的Java地图:

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

我想把所有来自JSONObject的数据存储在那个HashMap中。

有人能为此提供代码吗?我想用org。json库。


当前回答

有一个使用javax的旧答案。json发布在这里,然而它只转换JsonArray和JsonObject,但仍然有JsonString, JsonNumber和JsonValue包装类在输出。如果你想摆脱这些,这是我的解决方案,它会打开所有东西。

除此之外,它还使用Java 8流,并包含在单个方法中。

/**
 * Convert a JsonValue into a “plain” Java structure (using Map and List).
 * 
 * @param value The JsonValue, not <code>null</code>.
 * @return Map, List, String, Number, Boolean, or <code>null</code>.
 */
public static Object toObject(JsonValue value) {
    Objects.requireNonNull(value, "value was null");
    switch (value.getValueType()) {
    case ARRAY:
        return ((JsonArray) value)
                .stream()
                .map(JsonUtils::toObject)
                .collect(Collectors.toList());
    case OBJECT:
        return ((JsonObject) value)
                .entrySet()
                .stream()
                .collect(Collectors.toMap(
                        Entry::getKey,
                        e -> toObject(e.getValue())));
    case STRING:
        return ((JsonString) value).getString();
    case NUMBER:
        return ((JsonNumber) value).numberValue();
    case TRUE:
        return Boolean.TRUE;
    case FALSE:
        return Boolean.FALSE;
    case NULL:
        return null;
    default:
        throw new IllegalArgumentException("Unexpected type: " + value.getValueType());
    }
}

其他回答

想象一下你有如下的邮件列表。不受任何编程语言的限制,

emailsList = ["abc@gmail.com","def@gmail.com","ghi@gmail.com"]

下面是JAVA代码-用于将json转换为map

JSONObject jsonObj = new JSONObject().put("name","abc").put("email id",emailsList);
Map<String, Object> s = jsonObj.getMap();

希望这能起作用,试试这个:

import com.fasterxml.jackson.databind.ObjectMapper;
Map<String, Object> response = new ObjectMapper().readValue(str, HashMap.class);

str,你的JSON字符串

就这么简单,如果你想要电子邮件,

String emailIds = response.get("email id").toString();

有一个使用javax的旧答案。json发布在这里,然而它只转换JsonArray和JsonObject,但仍然有JsonString, JsonNumber和JsonValue包装类在输出。如果你想摆脱这些,这是我的解决方案,它会打开所有东西。

除此之外,它还使用Java 8流,并包含在单个方法中。

/**
 * Convert a JsonValue into a “plain” Java structure (using Map and List).
 * 
 * @param value The JsonValue, not <code>null</code>.
 * @return Map, List, String, Number, Boolean, or <code>null</code>.
 */
public static Object toObject(JsonValue value) {
    Objects.requireNonNull(value, "value was null");
    switch (value.getValueType()) {
    case ARRAY:
        return ((JsonArray) value)
                .stream()
                .map(JsonUtils::toObject)
                .collect(Collectors.toList());
    case OBJECT:
        return ((JsonObject) value)
                .entrySet()
                .stream()
                .collect(Collectors.toMap(
                        Entry::getKey,
                        e -> toObject(e.getValue())));
    case STRING:
        return ((JsonString) value).getString();
    case NUMBER:
        return ((JsonNumber) value).numberValue();
    case TRUE:
        return Boolean.TRUE;
    case FALSE:
        return Boolean.FALSE;
    case NULL:
        return null;
    default:
        throw new IllegalArgumentException("Unexpected type: " + value.getValueType());
    }
}

试试下面的代码:

 Map<String, String> params = new HashMap<String, String>();
                try
                {

                   Iterator<?> keys = jsonObject.keys();

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

                    }


                }
                catch (Exception xx)
                {
                    xx.toString();
                }

You can convert any JSON to map by using Jackson library as below: String json = "{\r\n\"name\" : \"abc\" ,\r\n\"email id \" : [\"abc@gmail.com\",\"def@gmail.com\",\"ghi@gmail.com\"]\r\n}"; ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = new HashMap<String, Object>(); // convert JSON string to Map map = mapper.readValue(json, new TypeReference<Map<String, Object>>() {}); System.out.println(map); Maven Dependencies for Jackson : <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.5.3</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.3</version> <scope>compile</scope> </dependency> Hope this will help. Happy coding :)