2011-08-18 48 views
1

我想創建一個字符串,它看起來像下面這樣:我如何有效地在Java中創建一個複雜的字符串?

"[{"product_id":"123","name":"stack"},{"product_id":"456","name":"overflow"}]" 

我有兩個陣列中product_idname。如何最有效地創建上述類型的字符串?

+0

我看到您對[相關反序列化問題](http://stackoverflow.com/q/7099803/193874)的評論。你想從兩個數組或從一個'List '轉換嗎? –

回答

0

如果事實證明你已經有了一個List<ProductInformation>,則默認序列化與flexjson與排除會給你的字符串:

String jsonResult = new JSONSerializer().exclude("*.class").serialize(listOfProductInformation); 

關於性能,最好的辦法是使用一個好的分析器來查看你的整體應用程序。這將識別您的真正熱點/瓶頸,如果事實證明這個序列化過程是一個熱點,您可以將時間調整爲@Ali提及,並通過分析器或性能測試工具運行,以測量影響。

13

這看起來像JSON。你應該使用JSON庫。

有很多在那裏(見this page,滾動幾乎到了年底),但

都是我」 d使用。

+1

樣品和一切的好回答。 –

+0

+1 @Sean Patrick Floyd,關於使用庫和使用哪個庫的好建議 - 如果未來需要添加新字段,具有更復雜的層次關係等,將提供靈活性和代碼清晰度。 –

0

我假設你有2個數組一個包含和product_id,另一個包含值,這兩個都是正確的順序。

我會創建我自己的java對象(PO​​JO),它有兩個字段product_idname然後將兩個數組並創建一個POJO數組(或列表),每個POJO包含product_id和name。然後,我只會使用傑克遜或Gson來創建我的JSON。

這些庫爲您提供了Java對象的JSON表示,因此在這種情況下,您必須確保您有一個列表或甚至包含您的product_idname的對象數組。

如果你堅持要做到這一點(或者沒有外部庫方式),那麼我會創建一個模板字符串並反覆調用replace並將其添加到StringBuffer中。如果字符串可能非常大,則StringBuffer非常重要。喜歡的東西:

String template = "{\"product_id\":\"productId\",\"name\":\"productName\"}"; 
StringBuffer result = new StringBuffer("["); 

for(int i=0; i<myProductArray.length; i++){ 
    String temp = template.replace("productId",myProductArray[i]); 
    temp = temp.replace("productName",myNameArray[i]); 
    if(result.length() > 1) 
     result.append(","); 
    result.append(temp); 
} 
result.append("]"); 
return result.toString(); 

如果可以更換templateStringStringBuffer和直接操縱的是,它會讓一噸的差異表現明智的大型字符串。

問候,

相關問題