这可能是愚蠢/过于复杂/几乎不可能,但......
我有一个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遍历Hashtable,检查值是否为ArrayList或HashTable,并继续检查和检查,直到它只是一个字符串值。我对此有所了解,但我似乎无法绕过递归过程。
有人可以帮忙吗?即使有人能想出更好的方式,或者我应该放弃希望,我也希望听到它!
提前致谢!
答案 0 :(得分: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 :(得分: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)
}
}