如何将每个 Json 属性写入没有其内容的列表

Posted

技术标签:

【中文标题】如何将每个 Json 属性写入没有其内容的列表【英文标题】:How to write every Json property into a List without its content 【发布时间】:2021-12-12 13:31:11 【问题描述】:

我有一个这样的 .Json 文件:


   "Main":
      "Funktion":
         "Sub1":"",
         "Sub2":
            "something1":"",
            "something2":"",
            "something3":""
         ,
         "Sub3":
            "something4":""
         ,
         "Sub4":
            "something5":""
         ,
         "Sub5":
            "something6":""
         
      
   

现在我想将每个“SubX”写入一个列表或数组,但每个子中没有文本。

所以它看起来像这样

输出:

Printed List:
"Sub1"
"Sub2"
"Sub3"
"Sub4"
"Sub5"

我已经通过转换为字符串并通过字符串句柄实现了它。 现在我想知道这个问题是否有更优雅的解决方案。

【问题讨论】:

你使用的是 Json.Net 还是 System.Text.Json? Json.net。我编辑了它 在 Json.Net 的情况下,您可以获得这样的名称:JObject.Parse(json)["Main"]["Funktion"].Children().Select(x => ((JProperty)x).Name) 【参考方案1】:

仅检索Funktion 子节点名称的一种方法如下:

JObject.Parse(json)["Main"]["Funktion"].Children().Select(x => ((JProperty)x).Name)
JObject.Parse 我们同样解析 json 使用["Main"]["Funktion"],我们遍历节点 .Children() 我们要求子节点 (JTokens) 使用.Select,我们将JToken 转换为JProperty,以便能够获得Name 属性

我想强调的是,这种方法容易出错。它高度依赖于实际结构。为了使其更健壮,请考虑使用TryGetValue 而不是索引运算符。

【讨论】:

以上是关于如何将每个 Json 属性写入没有其内容的列表的主要内容,如果未能解决你的问题,请参考以下文章

在 PowerShell 中将没有展平列表的 JSON 数组写入文件

如何修复流关闭异常

如何修改 CloudKit 参考列表

如何将具有元素数组的每个对象的对象列表转换为具有子元素作为属性的对象数组

如何使用 shell 脚本创建和编写属性文件

如何将 BIM 360 文件的内容作为文件流读取并将其写入另一个流