我有以下json:
{
"Company": {
"tech": {
"star": "abc.com",
"star1": "def.com",
"star2": "ghi.com"
},
"non tech": {
"graphic": "media.com",
"content": "xyz.com"
},
"City": "City1.com",
},
}
我正在使用下面的代码来读取json文件,但目前无法递归读取并到达内部级别 对于上面的例子,我只能获得第一级键和值,并且 for 循环运行 2 次,每当遇到链接时,我都必须在字典中添加它,但为此我必须达到内部级别:
string jsonFilePath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory.ToString(), "demo.json");
string json = File.ReadAllText(jsonFilePath);
Elements= (JObject)JsonConvert.DeserializeObject(json);
// await context.PostAsync(dictObj.Keys());
findJsonValues(Elements)
private Dictionary<string, string> findJsonValues(JObject Cat)
{
foreach (var pair in Cat)
{
string sKey = pair.Key;
// string ln = pair.Value.ToString();
string ss = Cat[sKey].ToString();
if (ss.StartsWith("https"))
{
//Add the catalogue and link to this dictionary to create final card
Console.WriteLine("Hey");
Link = ss;
//return Link;
// Cat = null;
// break;
linkDictionary.Add(sKey,ss);
jsonIntentLimit++;
if (jsonIntentLimit == 3)
{
//call a function
}
continue;
}
jsonValues(context,(JObject)pair.Value);
}
}
请帮忙。
使用此功能递归迭代所有节点
private static void Iterate(JToken token, Dictionary<string, string> keyValuePairs)
{
if (token is JProperty && token.First is JValue)
{
if (!keyValuePairs.ContainsKey(((JProperty)token).Name))
keyValuePairs.Add(((JProperty)token).Name, ((JProperty)token).Value.ToString());
}
foreach (JToken token2 in token.Children())
Iterate(token2, keyValuePairs);
}
调用此方法以获取所有节点
using (StreamReader r = new StreamReader(filepath))
{
string json = r.ReadToEnd();
JToken token = JToken.Parse(json);
var keyValuePairs = new Dictionary<string, string>();
Iterate(token, keyValuePairs);
foreach (var keyValue in keyValuePairs)
{
Console.WriteLine($"{keyValue.Key}:{keyValue.Value}");
}
}