我给了一个字符串,表示类型为Map<String, String>
的json对象。一个json对象中的字符数有一个约束。如果JSON对象中的字符数超过指定的限制,我必须将json对象转换为多个json对象的Array。使用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"
}
]
用例: 我必须将这些json对象添加为电子邮件的标题。由于smtp的每个标头值的字符数限制为1000。我必须将其分解为多个json对象,每个json对象将是一个标头值。
答案 0 :(得分:0)
最后我只是使用了琐碎的方法。这是我写的代码片段,对其他人有用,可以快速使用:
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;
}
消息将包含所有标头值作为multi-map。