使用 C# 代码在 JSON 中搜索键和值



我有以下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}");
}
}

最新更新