2013-10-01 35 views
1

我目前使用下面的代碼:如何JSON列表輸出在阿帕奇節儉

TSerializer serializer = new TSerializer(
     new TJSONProtocol.Factory()); 

Log.print("[ \"rec\","+list.size()+","); 
for (int i = 0; i < list.size(); i++) { 
    if(i!=0) Log.print(","); 
    Log.print(serializer 
      .toString((TBase) (list.get(i)))); 
} 

名單是ArrayList<RFileMetadata>()數據結構,我得到例如以下的輸出:

[ 
    "rec", 
    3, 
    { 
     "1": { 
      "str": "allalla" 
     }, 
     "2": { 
      "i64": 91299230 
     } 
    }, 
    { 
     "1": { 
      "str": "allalla" 
     }, 
     "2": { 
      "i64": 91299230 
     } 
    }, 
    { 
     "1": { 
      "str": "allalla" 
     }, 
     "2": { 
      "i64": 91299230 
     } 
    } 
] 

但是我怎樣才能直接輸出。

我在問一個代碼,它沒有使用for循環來手動打印["rec",3,....]等。我不應該生成,程序應該爲我生成它。

+0

很難從文字中說出你真正想要的東西。如果你想擁有一段產生上述輸出的代碼,你基本上必須做什麼Thrift代碼。不應該很難從來源中找到答案。什麼是完全不清楚的是我是最後一句「我不應該產生,程序應該爲我產生」 - 到底什麼是「它」?輸出?生成輸出的代碼?還有別的嗎? – JensG

回答

0

您不必顯式創建json字符串,然後將其字符串化。 阿帕奇節儉提供了一個更好的方式來做到這一點。

如果您通過您的FileStore的代碼,它在我的節儉本地被命名爲相同。

List<RFileMetadata> struct = client.listOwnedFiles(userName); 

jsonProtocol.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.size())); 

    for (RFileMetadata _iter3 : struct) { 
     _iter3.write(jsonProtocol); 
    } 

jsonProtocol.writeListEnd(); 

如果您瞭解更多節儉代碼,您將更容易理解節儉的實際工作方式。