使用Jackson构建有或没有Marshaling的自定义JSON?

时间:2017-07-28 11:55:52

标签: java json jackson

正在建立一个像这样的JSON字符串:

public String buildAutoCompleteQuery(int from, int pageSize, String criteria) {
    StringBuilder autoComplete = new StringBuilder();
    autoComplete.append("{").append("\"from\"").append(":").append(from).append(",").append("\"size\"").append(":").append(pageSize).append(",").append("\"query\"").append(":").append("{").append("\"match\"").append(":").append("{")
            .append("\"full_text\"").append(":").append("\"").append(criteria).append("\"").append("}").append("}}");
    return autoComplete.toString();
}

在输入样本参数后,当您打印它时(使用漂亮的打印),它看起来像这样:

{
    "from": 1,
    "size": 15,
    "query": {
        "match": {
            "full_text": "Hello"
        }
    }
}

使用Jackson创建这个JSON对象有没有更简单的方法(有或没有编组/数据绑定)?

2 个答案:

答案 0 :(得分:0)

您应该尝试的一种方法是,您可以为对象创建一个类,然后使用Jackson将对象转换为字符串。

{
"from": 1,
"size": 15,
"query": {
    "match": {
        "full_text": "Hello"
    }
  }
}

现在为此创建类

public class AutoComplete{
   private Integer from;
   private Integer size;
   private Query query;
    // getters and setters
}

public class Query{
  private Match match;
}

public class Match{
  private String full_text;
}

然后使用Jackson转换自动完成对象,您将获得所需的JSON字符串。

答案 1 :(得分:0)

我会将Jackson的ObjectMapper用于这些目的。您可能想要创建一组描述您的生态系统的对象(如之前的评论)。

(Direction对象 - > json)如果你有一个对象并且你想获得一个JSON字符串,那就使用ObjectMapper#writeValueAsString(Object value)

(方向json->对象)如果你有一个json字符串,可能是一个json文件,并且想要获取一个对象,请使用ObjectMapper#readValue(String content,Class valueType)。 检查好的示例in here

我个人认为ObjectMapper非常方便,您可以将其配置为忽略空值或者让我们说序列化类的私有成员。