我从 JavaScript/Ruby 转到 Java。假设我有以下动物的 JSON 对象:
{
name: {
common: "Tiger",
latin: "Panthera tigris"
}
legs: 4
}
我正在处理很多动物 API,我想将它们全部规范化为我自己的通用格式,例如:
{
common_name: "Tiger",
latin_name: "Panthera tigris",
limbs: {
legs: 4,
arms: 0
}
}
例如,在 JavaScript 中,这很简单:
normalizeAnimal = function(original){
return {
common_name: original.name.common,
latin_name: original.name.latin,
limbs: {
legs: original.legs || 0,
arms: original.arms || 0
}
}
}
但是在 Java 中呢?使用 org.json 中的 JSONObject 类,我可以继续做这样的事情:
public JSONObject normalizeAnimal(JSONObject original) throws JSONException{
JSONObject name = original.getJSONObject("name");
JSONObject limbs = new JSONObject();
JSONObject normalized = new JSONObject();
normalized.put("name_name", name.get("common"));
normalized.put("latin_name", name.get("latin"));
try{
limbs.put("legs", original.get("legs");
}catch(e){
limbs.put("legs", 0);
};
try{
limbs.put("arms", original.get("arms");
}catch(e){
limbs.put("arms", 0);
};
normalized.put("limbs", limbs);
return normalized;
}
随着我处理的 JSON 对象变得越来越长、越来越深,情况变得更糟。除了所有这些之外,我正在处理许多动物对象的提供者,我最终会寻找一些简洁的配置格式来描述转换(比如,也许,“common_name”:“name.common ", "limbs.legs": "腿"
).
我该如何着手减少 Java 中的这种问题?
最佳答案
使用 Gson 或 Jackson 等库并将 JSON 映射到 Java 对象。
所以你会有一个像这样的bean
public class JsonAnima {
private JsonName name;
private int legs;
}
public class JsonName {
private String commonName;
private String latinName;
}
它可以很容易地与任何库转换,比如(与 Jackson)
ObjectMapper mapper = new ObjectMapper();
JsonAnimal animal = mapper.readValue(jsonString, JsonAnimal.class);
然后您可以创建一个“转换器”以将 JsonAnimal 映射到您的 Animal 类。
这可能是一种方法。 :)
一些链接:
关于java - Java中JSON格式之间的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12645837/