4

这是一个非常简单的问题,但似乎找不到直接的答案。我读入了一个 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 然后获取对游戏世界的引用。这一定是太平庸了。

谢谢,

约翰

4

4 回答 4

4

请改用JArrayandJObject对象,如下所示:

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);
    }
}
于 2013-08-19T16:25:30.553 回答
3

给定一个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
}
于 2013-08-19T17:20:56.977 回答
0

在读取字符串时查看阅读器的属性。特别是在 TokenType 和 Value 属性中。如果您真的需要按顺序阅读它,那就是要走的路。TokenType 将依次是 StartObject、PropertyName、String 等,具体取决于正在读取的节点。基本上每次看到一个 PropertyName 时,下一个就是属性值。

请注意,使用其他技术可能会更好,但这一切都取决于。

于 2013-08-19T16:27:40.370 回答
0

I see that this thread is a bit old... However, @Karl Anderson, your answer was helpful. I just added a little bit to it which was way better than the 3 or 4 nested foreach loops that I had going on... see code below. Thank you for the help!

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);
    }
}
于 2019-03-17T14:57:55.213 回答