【问题标题】:How to explore all property and and its value in nested json object in C#?如何在 C# 中探索嵌套 json 对象中的所有属性及其值?
【发布时间】:2018-10-30 13:08:32
【问题描述】:
{
    "Main": 
    {
       "subfolder" : 
        {        
           "photos" : 
            {
              "January" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "February" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "March" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "April" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "May" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo"
                }     
            },
            "photos_of_camera" : 
            {
              "January" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "February" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "March" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "April" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "May" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo"
                }     
            }
        },
         "subfolder_1" : 
        {        
           "photos" : 
            {
              "January" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "February" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "March" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "April" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "May" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo"
                }     
            },
            "photos_of_camera" : 
            {
              "January" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "February" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "March" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "April" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "May" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo"
                }     
            }
        }
    },
    "Root": 
    {
       "subfolder" : 
        {        
           "photos" : 
            {
              "January" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "February" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "March" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "April" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "May" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo"
                }     
            },
            "photos_of_camera" : 
            {
              "January" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "February" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "March" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "April" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "May" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo"
                }     
            }
        },
         "subfolder_1" : 
        {        
           "photos" : 
            {
              "January" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "February" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "March" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "April" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "May" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo"
                }     
            },
            "photos_of_camera" : 
            {
              "January" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "February" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "March" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "April" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo",
                    "location": "location detail"
                },
               "May" : 
                {
                    "name" : "Detail of photo",
                    "date": "id of photo"
                }     
            }
        }
    }
}

我有这样的数据。 我想检索所有财产,如果有的话,它的价值。 我只能使用像这样的代码使用 Newtonsoft.json 包检索第一个孩子

string a = File.ReadAllText(@"json file path");


List<string> read(string file)
{
    JObject jObject = JObject.Parse(file);
    foreach(JProperty i in jObject.Properties())
    {
        var name = i.Name;
        Console.WriteLine(bb);
    }
    var child = jObject.First.First;
    if(!st.HasValues)
    {
        Console.WriteLine(child.ToString());
        return null;
    }
    string cnr = Convert.ToString(child);
    return recursion(cnr);
}

recursion(a);

但它只给我第一个孩子的数据,就像这样

主要

子文件夹

子文件夹_1

照片

photos_of_camera

一月

二月

三月

四月

五月

名字

日期

位置

照片细节

但我想要所有的属性和它的价值,所以任何人都可以帮助我吗??

【问题讨论】:

  • “所有属性”到底是什么意思?您想要namedatelocation 和/或其他的所有值吗?请告诉我们你的输出应该是什么。
  • 您可以使用DescendantsAndSelf(),如图所示,例如在this answer 的开头到Picking Out Simple Properties from Hierarchical JSONSelectTokens("..*")this answerHow can I generate all possible LINQ strings of a json object for Json.net? 所示是另一种可能性。
  • @RuiJarimba , 输出如下 主子文件夹, 照片, 一月, 姓名, 照片详情, 日期, 照片 ID, 位置, 位置详情, 二月, 姓名, 照片详情, 日期, 身份证照片,位置,位置详细信息,都在一个列表中
  • @Shaktishah 我注意到您的“日期”属性有一个额外的空间,这不是故意的吗?
  • 但是我想要所有的属性和它的价值,所以任何人都可以帮助我吗?? - 请edit你的问题能准确说明你想要的非原始"subfolder"? 之类的属性

标签: c# .net json deserialization


【解决方案1】:

如果目的只是显示所有属性及其值,您可以考虑以下递归方法,因此它可以作为您的起点。

string a = File.ReadAllText(@"json file path");
getPropertiesAndValues(a);

private static void getPropertiesAndValues(string json)
{
JObject jObject = JObject.Parse(json);
foreach (JProperty i in jObject.Properties())
{
    var name = i.Name;
    var value = i.Value;

    Console.Write($"Name: {name} \t\t");
    if (!i.Value.HasValues)
        Console.WriteLine($"Value: {i.Value}");
    Console.WriteLine();
    if (i.HasValues && i.Value.HasValues)
    getPropertiesAndValues(i.First.ToString());
}

【讨论】:

  • 它只探索第一个孩子而不是全部
  • 我在这里分享之前按原样执行了代码,我得到了所有带有值的名称!!!
猜你喜欢
  • 1970-01-01
  • 2020-02-21
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 2016-10-16
  • 2017-04-11
相关资源
最近更新 更多