【问题标题】:combine all json paths in string c#结合字符串c#中的所有json路径
【发布时间】:2014-12-07 08:37:53
【问题描述】:

我有一个大的 json 数据,我想从根获取所有路径,直到获取路径的值,然后将结果存储到字符串中,如下所述 例如,这是我的 json

{  
   "root":{  
      "first":{  
         "first1":{  
            "value":"1"
         },
         "first2":{  
            "value":"2"
         },
         "first3":{  
            "value":"3"
         }
      },
      "second":{  
         "second1":{  
            "value":"1"
         },
         "second2":{  
            "value":"2"
         },
         "second3":{  
            "value":"3"
         }
      },
      "third":{  
         "third1":{  
            "value":"1"
         },
         "third2":{  
            "value":"2"
         },
         "third3":{  
            "value":"3"
         }
      },
      "four":{  
         "value":"4"
      },
      "five":{  
         "five1":{  
            "five11":{  
               "value":"five11"
            },
            "five12":{  
               "value":"five12"
            }
         },
         "five2":{  
            "five21":{  
               "five211":{  
                  "value":"five211"
               }
            }
         }
      }
   }
}

然后我想在 c# 中动态地使每个路径像下面这样并在屏幕上显示请告诉我一种方法来实现这个

root.first.first1.value
root.first.first2.value
root.first.first3.value

root.second.second1.value
......

root.four.value

root.five.five1.five11.value
root.five.five1.five12.value
....
root.five2.five21.five211.value 

【问题讨论】:

  • 人们向您和您提出建议,然后您问,但它是否执行 X 或 Y 的问题。您的代码在哪里 - 您尝试了什么,当您尝试向您建议的事情时会发生什么- 你有没有尝试过任何使用呈现给你的想法,然后调试看看你能做什么。你做了什么???
  • 感谢您的建议,但我之前尝试过他们的想法,如果您看到这个: string value= (string)obj["four"]["value"];这个可以应用于包含 20000 个不同节点和路径的 json 数据吗?如果你能做到,请帮助我。
  • 那么你真的应该展示ant current example,这样人们就可以看到你去了哪里以及你尝试了什么,这样你就不会浪费时间,他们可以给你更多帮助答案。 @Ibn 为您提供了唯一真正的答案,该答案适用于大量(可变)行,而树中的节点仅在运行时才知道。还有那个递归。
  • 是的,我认为我的问题很清楚,Ibn 理解了我的问题,然后他给我发了准确的答案,谢谢你和 lbn

标签: c# json string path


【解决方案1】:

使用 JSON.NET 并递归地遍历 Children 属性并检查当前令牌是否没有将 HasValues 设置为 true,如果是这种情况,则将该令牌的 Path 属性添加到 StringBuilder 或你有什么。应该给你你想要的。

伊迪丝:代码示例

我很懒,只包含了整个控制台应用程序代码。

Example on dotnetfiddle.net

using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Text;

public class Program
{
    public static void Main()
    {
            var json = @"
{  
   ""root"":{  
      ""first"":{  
         ""first1"":{  
            ""value"":""1""
         },
         ""first2"":{  
            ""value"":""2""
         },
         ""first3"":{  
            ""value"":""3""
         }
      }
    }
}";

        var jobject = JObject.Parse (json);
        var sb = new StringBuilder ();

        RecursiveParse (sb, jobject);

        Console.WriteLine (sb.ToString());
    }

    public static void RecursiveParse(StringBuilder sb, JToken token)
    {
        foreach (var item in token.Children()) {
            if (item.HasValues)
            {
                RecursiveParse (sb, item);
            } else {
                sb.AppendLine (item.Path);
            }
        }

    }   
}

【讨论】:

  • 谢谢您,我认为您的想法可能可行,但我需要代码,如果您有时间将代码发送给我,我将不胜感激。
  • 当我在电脑附近时会添加一个示例。
  • 请把例子发给我好吗?
  • 我在答案中提供的代码有什么问题?这还不够吗?
猜你喜欢
  • 2019-01-08
  • 2019-03-04
  • 2016-01-18
  • 2015-04-14
  • 1970-01-01
  • 2016-06-21
  • 2017-09-14
  • 2019-08-19
  • 1970-01-01
相关资源
最近更新 更多