如何从JToken对象(非JObject)提取键?仅使用JRaw遍历方案
如何从JToken(而非JObject)中提取键值对
嗨,没问题!完全可以从JToken对象中提取键——你之所以觉得只能拿到值,是因为没抓住JToken子节点的类型特点。
当你的JToken代表一个JSON对象时,它的子元素其实都是JProperty类型的节点,每个JProperty都自带Name(就是你要的键)和Value(对应的值)属性。
针对你给出的代码(而且你明确要求只能用这个实现方式),我们只需要对JRaw解析后的内容做一步转换,就能轻松拿到键值对:
var raw = JRaw.Parse(x); // 把JRaw包裹的原始JSON字符串解析成JToken(本质是JObject,不过我们用JToken类型操作) var jsonToken = JToken.Parse(raw.Value.ToString()); // 遍历所有JProperty子节点 foreach (var prop in jsonToken.Children<JProperty>()) { // 获取键 string key = prop.Name; // 获取值(按需转成字符串或其他类型) string value = prop.Value.ToString(); // 这里可以处理你的业务逻辑 Console.WriteLine($"Key: {key}, Value: {value}"); }
小提示:
如果你的输入x本身就是标准的JSON对象字符串,解析后的jsonToken实际上是JObject的实例,但JObject继承自JToken,所以完全符合你“不直接用JObject”的要求。
如果x是JSON数组,那遍历逻辑会稍有不同,但核心还是通过Children()获取子节点,再根据节点类型处理——不过从你的问题描述来看,你应该是在处理JSON对象。
内容的提问来源于stack exchange,提问作者Arnold Zahrneinder
相关产品推荐
相关产品推荐

