繁体   English   中英

Jackson:将JSON对象序列化为多个对象

[英]Jackson : Serialize a JSON object to multiple objects

我给了一个字符串,它表示Map<String, String>类型的json对象。 一个json对象中的字符数受到限制。 如果JSON对象中的字符数超过指定的限制,我将不得不将json对象转换为多个json对象的数组。 使用Jackson Mapper进行此操作最简单,最干净的方法是什么?

例如:如果这是给定的json对象,则为:

{
   "cfname":"Kob",
   "NAME_6":"Philharmonic Youth Orchestra",
   "NAME_5":"Pathways to Discovery: Engineering, Medicine & CSI",
   "NAME_4":"Fashion Design Camp",
   "IMAGE_URL_1":"http://res.cloudinary.com/pxxxxxx-jxxxxxx/image/upload/c_fill,h_230,w_260/v0000000000/vccrgwdekjkpdvpsrv4f.jpg",
   "IMAGE_URL_2":"http://res.cloudinary.com/pxxxxxx-jxxxxxx/image/upload/c_fill,h_230,w_260/v0000000000/wlom2u5525nyjjbttazw.jpg"
}

如果一个json对象的字符数限制为200。则输出为:

[
       {
          "cfname":"Kob",
          "NAME_6":"Philharmonic Youth Orchestra",
          "NAME_5":"Pathways to Discovery: Engineering, Medicine & CSI",
          "NAME_4":"Fashion Design Camp"
       },
       {
          "IMAGE_URL_1":"http://res.cloudinary.com/pxxxxxx-jxxxxxx/image/upload/c_fill,h_230,w_260/v0000000000/vccrgwdekjkpdvpsrv4f.jpg"
       },
       {
          "IMAGE_URL_2":"http://res.cloudinary.com/pxxxxxx-jxxxxxx/image/upload/c_fill,h_230,w_260/v0000000000/wlom2u5525nyjjbttazw.jpg"
       }
]
  1. 我们可以假设给定json对象中任何键值对的长度都小于给定的字符数限制。
  2. 我们在计数字符时应忽略空格和换行符。

用例:我必须将这些json对象添加为电子邮件的标头。 由于smtp每个标题值的字符数限制为1000。 我必须将其分解为多个json对象,每个json对象将是一个标头值。

最后,我只是使用了简单的方法。 这是我写的代码片段,对其他人快速使用很有用:

int                 charCount = 11 + rcpt.length();
Map<String, String> map       = Maps.newHashMap();

for (Entry<String, String> e : mergeTags.entrySet()) {
  int cnt = charCount(e);

  if (charCount + cnt >= 987) {
    message.addHeader(TEMPLATE_MERGEVARS_HEADER, BINDER.writeValue(map));
    map = Maps.newHashMap();
    charCount = 11 + rcpt.length();
  }

  map.put(e.getKey(), e.getValue());
  charCount += cnt;
}

if (!map.isEmpty()) {
  message.addHeader(TEMPLATE_MERGEVARS_HEADER, BINDER.writeValue(map));
}

private static int charCount(Entry<String, String> e) {
  return e.getKey().length() + e.getValue().length() + 6;
}

消息将包含所有标头值作为多图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM