首页 > 解决方案 > 从没有已知结构的 JSON 中检索所有 JSON 键的值

问题描述

我从某个端点获取 JSON,我只知道它将包含名为“x”的数组,它可以包含所有内容(另一个数组、JSON 属性等)。

现在,我想从所有键中检索值并将其连接成一个字符串。

我找到了这个解决方案,但是当它遇到属性数组时,它给了我原样,如下所示:

"test": {
      "test1": "tea",
      "test2": "tt",
      "foo": "",
      "bar": "48f7c3284ca0",
      "random": "Harry",
      "anything": "Potter"
    },

我想从上面仅检索值并将它们连接成字符串,如下所示:

“茶 tt 48f7c3284ca0 哈利波特”。

换句话说 - 我想从通用JSON 中foreach每个键,如果它没有孩子,获取它的值并继续foreaching

标签: c#json.netjson.net

解决方案


private static IEnumerable<string> Flat(JToken token)
    {
        switch (token.Type)
        {
            // nested value types
            case JTokenType.Object:
            case JTokenType.Array:
            case JTokenType.Property:
                foreach (var item in token.Children().Select(Flat).SelectMany(x => x))
                    yield return item;
                break;
            default: // primitive values: int, string, float
                yield return token.ToString();
                break;
        }
    }

    static async Task Main(string[] args)
    {
        JToken token = Newtonsoft.Json.JsonConvert.DeserializeObject<JToken>(File.ReadAllText("test.json"));
        foreach (var item in Flat(token))
        {
            Console.WriteLine(item);
        }
    }

这是测试输出 https://ctrlv.cz/TvqP


推荐阅读