使用c解析并迭代json对象来寻址每个字段
本文关键字:寻址 字段 对象 json 迭代 使用 | 更新日期: 2023-09-27 18:28:18
这是一个非常简单的问题,但似乎找不到直接的答案。我读入了一个JSON对象。然后,我想解析它,并能够直接寻址令牌或值,然后格式化它以编写文件输出,我将在另一个应用程序中使用它。我正在使用C#和Newtonsoft库。
我的代码:
JsonTextReader reader = new JsonTextReader(re);
while (reader.Read())
{
if (reader.Value != null)
Console.WriteLine("Value: {0}", "This is the value <Tags>: " + reader.Value);
}
如何对每一行进行寻址?例如,desc然后获取对游戏世界的引用。这一定很普通。
谢谢,
johnh
使用JArray
和JObject
对象,如下所示:
var json = System.IO.File.ReadAllText("YourJSONFilePath");
var objects = JArray.Parse(json);
foreach(JObject root in objects)
{
foreach(KeyValuePair<String, JToken> tag in root)
{
var tagName = tag.Key;
Console.WriteLine("Value: {0}", "This is the value <Tags>: " + tagName);
}
}
给定JToken token
:
if (token.Type == JTokenType.Object)
{
foreach (var pair in token as JObject)
{
string name = pair.Key;
JToken child = pair.Value;
//do something with the JSON properties
}
}
else if (token.Type == JTokenType.Array)
{
foreach (var child in token.Children())
{
//do something with the JSON array items
}
}
else
{
//do something with a JSON value
}
在读取字符串时查看读取器的属性。特别是在TokenType和Value属性。如果你真的需要按顺序阅读,那就是方法。根据读取的节点,TokenType将依次为StartObject、PropertyName、String等。基本上,每次看到PropertyName时,下一个将是属性值。
请注意,使用其他技术可能会更好,但这完全取决于情况。
我发现这个线程有点旧。。。然而,@Karl Anderson,你的回答很有帮助。我只是添加了一点,这比我正在进行的3或4个嵌套foreach循环要好得多…请参阅下面的代码。谢谢你的帮助!
JArray jsonResponse = JArray.Parse(content);
Debug.WriteLine("'n'njsonResponse: 'n" + jsonResponse);
foreach (JObject root in jsonResponse)
{
foreach (KeyValuePair<String, JToken> tag in root)
{
var tagName = tag.Key;
var variable = tag.Value;
Debug.WriteLine("Key: " + tagName + " Value: " + variable);
}
}