从JSON字符串创建Hashmap
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从JSON字符串创建Hashmap相关的知识,希望对你有一定的参考价值。
从java中的json字符串创建一个hashmap?
我有像{"phonetype":"N95","cat":"WP"}
的json字符串,想要转换成标准的Hashmap。
我该怎么做?
答案
解析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}
另一答案
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;
}
另一答案
将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;
}
另一答案
你可以用杰克逊来做这件事。我还没有找到一个简单的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();
}
}
Extra
以下是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");
propertyMa以上是关于从JSON字符串创建Hashmap的主要内容,如果未能解决你的问题,请参考以下文章
将数据从片段列表视图项传递到活动字符串变量 onitemclicklistener