我正在尝试使用 GSON 解析我的 JSON 字符串,并从简单的 json 字符串中提取键:值对并将其加载到 map 中。截至目前,我正在使用 org.json.simple.parser.JSONParser 来执行此操作。现在我正在尝试使用 GSON 做同样的事情。
下面是我的 json 字符串 jsonstringA
-
{"description":"Hello World.","hostname":"abc1029.dc3.host.com","ipaddress":"100.671.1921.219","hostid":"/tt/rt/v2/dc3/111","file_timestamp":"20140724","software_version":"v13","commit_hash":"abcdefg"}
现在我需要序列化上面的 JSON 字符串,并从 json stringg 中提取以下字段,并将其作为键值对放入 map m
中。这意味着在 map 中它应该是 description
作为键,Hello World
作为值。对于其他人也是如此。
public static final Set<String> MAPPING_FIELDS = new HashSet<String>(Arrays.asList(
"description", "hostname", "ipaddress", "hostid", "software_version"));
private final static JSONParser parser = new JSONParser();
parseJSONData(jsonstringA, MAPPING_FIELDS);
public Map<String, String> parseJSONData(String jsonStr, Set<String> listOfFields) {
Map<String, String> m = new HashMap<String, String>();
try {
Object obj = parser.parse(jsonStr);
org.json.simple.JSONObject jsonObject = (org.json.simple.JSONObject) obj;
if (jsonObject != null) {
for (String field : listOfFields) {
String value = (String) jsonObject.get(field);
m.put(field, value);
}
}
} catch (ParseException e) {
// log exception here
}
return m;
}
我如何在这里使用 GSON 来做同样的事情?
最佳答案
这很简单。只需创建一个 POJO,其变量与 JSON 字符串中使用的变量相同。
查看 Gson#fromJson(Reader,Type) 的 Java 文档
示例代码:
class ClientDetail {
private String description;
private String hostname;
private String ipaddress;
private String hostid;
private String file_timestamp;;
private String software_version;
private String commit_hash;
// getter & setter
}
BufferedReader reader = new BufferedReader(new FileReader(new File("json.txt")));
ClientDetail data = new Gson().fromJson(reader, ClientDetail.class);
<小时/>
您也可以使用 TypeToken
将其转换为 Map
将其转换为预期类型。
示例代码:
BufferedReader reader = new BufferedReader(new FileReader(new File("json.txt")));
Type type = new TypeToken<Map<String, String>>() {}.getType();
Map<String, String> data = new Gson().fromJson(reader, type);
关于java - 如何使用GSON序列化json字符串并从中提取键和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25072521/