2013-07-09 76 views
0

這可能是愚蠢的/過於複雜/幾乎是不可能的鍵和值,但是......遞歸打印一個Hashtable,包括哈希表和的ArrayList

我有一個JSON文件。我使用C#類(http://bit.ly/1bl73Ji)將文件解析到HashTable中。

所以,我現在有一個HashTable。這個HashTable有鍵和值。但是,其中一些值是ArrayLists或HashTables。有時這些ArrayLists包含HashTables,有時HashTables包含Hashtables,等等等等等等......

我基本上只是試圖將這些鍵和值打印到文件中,只是使用簡單的縮進來區分,例如,

dateLastActivity 
    2013-07-01T13:50:51.746Z 
members 
    memberType 
     normal 
    avatarHash 
     5f9a6a60b6e669e81ed3a886ae 
    confirmed 
     True 
    status 
     active 
    url 
     www.awebsite.com 
    id 
     4fcde962a1b057c46607c1 
    initials 
     AP 
    username 
     ap 
    fullName 
     A Person 
    bio 
     Software developer 

我需要recursivley經過哈希表,檢查是否值是一個ArrayList或哈希表,並保持檢查和檢查,直到它只是一個字符串值。我對它有過一次破解,但我似乎無法圍繞遞歸進行思考。

任何人都可以幫忙嗎?即使有人能想到更好的辦法,或者我應該放棄希望,我也想聽到它!

在此先感謝!

回答

1

有針對

老實說,我只想用Json.NET圖書館,這就是我使用幾乎所有我的項目來處理我的JSON,它是不斷更新和運作非常良好。

如果你想要一個易於人類讀取的文件格式,序列化(序列化意味着轉換成數據表示形式)數據並稍後進行人工編輯,這也很好。它具有序列化幾乎大部分對象開箱即用的功能。

對於大多數對象,你所要做的就是將這個語句序列化爲一個字符串。


string s = JsonConverter.Serialize(theObject); 
//assume you have a write file method 
WriteFile(filename, s); 

這就是它在大多數情況下,序列化和反序列化也很容易


string content = ReadFile(filename); 
MyObject obj = JsonConverter.Deserialize(content); 

庫還包括匿名對象的支持,允許你指定你的對象是如何解析與屬性,其他很多很酷的功能,同時還快於內置的.NET版本

1

僞代碼答案:

main(){ 
recurse(0, myHashTable) 
} 

recurse(int level, Structure tableOrArray){ 
    for element x in tableOrArray{ 
      if(x is a string) print (level)*indent + x; 
      if(x is not a string) recurse(level + 1, x) 
    } 
}