java - Java中JSON格式之间的映射

标签 java json

我从 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 类。

这可能是一种方法。 :)


一些链接:

GSON:http://code.google.com/p/google-gson/

jackson :http://wiki.fasterxml.com/JacksonHome

关于java - Java中JSON格式之间的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12645837/

相关文章:

java - 如何避免修剪这些尾随空格?

java - 在scala中使用泛型创建java匿名类的问题

java - 为亚马逊 s3 上的每个视频商店创建缩略图的最佳方法是什么?

objective-c - 序列化为 JSON 的可编译 IDL

javascript - 显示为文本的 JSON 变量

java - Java中有秒表吗?

json - 读取为 json 时出错

javascript - 如何使用 jquery 发送对象的 json 列表?

java - Json 使用 Jackson 库序列化 JDK 动态代理

java - java 泛型中的有界通配符