0

这可能很愚蠢/过于复杂/几乎不可能,但是......

我有一个 JSON 文件。我使用 C# 类 ( http://bit.ly/1bl73Ji ) 将文件解析为 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

我需要递归遍历 Hashtable,检查该值是 ArrayList 还是 HashTable,并不断检查,直到它只是一个字符串值。我对此有所了解,但我似乎无法理解递归性。

有人可以帮忙吗?即使有人能想到更好的方法,或者我应该放弃希望,我也想听听!

提前致谢!

4

2 回答 2

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 版本更快

于 2013-07-09T16:34:22.103 回答
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)
     }
}
于 2013-07-09T16:37:15.867 回答