2013-12-12 134 views
1

我給出了一個表示類型爲Map<String, String>的json對象的字符串。對一個json對象中的字符數量有限制。如果JSON對象中的字符數超過指定的限制,我必須將json對象轉換爲多個json對象的數組。使用Jackson Mapper進行此操作的最簡單和最簡單的方法是什麼?Jackson:將一個JSON對象序列化爲多個對象

例如: 如果此給出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對象將是一個標題值。

+1

樣品問題也可能幫助您快速得到答案 – vels4j

+0

我會消除字符限制。限制單個對象的大小沒有合乎邏輯的理由。 –

+0

你不能改變要求!我現在在這個問題中解釋了我的用例。看看它。 – CodePredator

回答

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; 
} 

消息將包含所有的頭值多圖。