C# C获取长字符串中出现的所有单词的所有内容
我有这个字符串,实际上是JSON格式的C# C获取长字符串中出现的所有单词的所有内容,c#,json,string,C#,Json,String,我有这个字符串,实际上是JSON格式的 { "key1": val1 "key2": val2 . . . "keyN": { "keyN1": valN1 "keyN2": valN2 "keyN3": { "keyN3-1": valN3-1 "keyN3-2": valN3-2 } } . . . "keyNN": { "keyNN1": valNN1 "keyNN2": v
{
"key1": val1
"key2": val2
.
.
.
"keyN": {
"keyN1": valN1
"keyN2": valN2
"keyN3": {
"keyN3-1": valN3-1
"keyN3-2": valN3-2
}
}
.
.
.
"keyNN": {
"keyNN1": valNN1
"keyNN2": valNN2
"keyNN3": [
{
"keyNN3-1": valNN3-1,
"keyNN3-2": valNN3-2,
"keyNN3-3": {
"keyNN3-3-1": valueNN3-3-1,
"keyNN3-3-2": valueNN3-3-2,
"keyM": {
"KeyM1": ValueM1,
"KeyM2": ValueM2,
.
.
"KeyMN": ValueMN
}
}
},
.
.
.
{
"keyNN3-1": valNN3-1,
"keyNN3-2": valNN3-2,
"keyNN3-3": {
"keyNN3-3-1": valueNN3-3-1,
"keyNN3-3-2": valueNN3-3-2,
"keyM": {
"KeyM1": ValueM1,
"KeyM2": ValueM2,
.
.
"KeyMN": ValueMN
}
}
}
]
}
}
我想得到钥匙的所有内容每次钥匙出现,我的意思是,我想把这个还给你
[
{
"KeyM1": ValueM1,
"KeyM2": ValueM2,
.
.
"KeyMN": ValueMN
},
.
.
{
"KeyM1": ValueM1,
"KeyM2": ValueM2,
.
.
"KeyMN": ValueMN
}
]
我接收不同格式的字符串,first struct不是唯一的struct,但总是有keyM。在这一刻,我做了一段时间,但效率不高,我想知道是否存在更好的方法。如果我正确理解您的JSON结构,使用JSON.NET应该可以执行以下操作:
var jObject = JsonConvert.Deserialize<JObject>(jsonText);
var keyMItems = jObject.SelectTokens("keyM");
测试jsonpath的好工具您能稍微澄清一下您的期望吗?当您说要获取所有内容时,您的意思是要获取包含KeyM*属性的整个JSON对象吗?或者仅仅是具有这些属性的行?或者只是这些属性的值?请在代码中提供您的尝试。谢谢。另外:你能用while循环来分享你用来做这件事的代码吗,并详细说明为什么它没有效率?你的意思是它使用了大量的代码行,还是太长了?如果需要的时间太长,那么您得到的JSON有效负载有多大?如果您将示例更改为更具体,也会更好,例如,我们是否要了解keyM的用法,您希望使用后缀查找键?考虑到你已经收集了keyM1、keyM2、keyM3等等,或者你检查的是一个任意的规则,只需要说这个键是一个有趣的键就可以了吗?很抱歉,这个问题很糟糕,我试图澄清一下,我指的是获取keyM的所有内容、属性和值。作为回报,我想显示keyM对象的键和值。我的意思是速度慢,时间太长。字符串可以是600000个或更多字符。非常感谢,这是我所需要的,我刚刚将它与@striplingwarrior的答案结合在一起,效果非常好。对于您的答案,您的帮助非常有用
Console.WriteLine(new JArray(keyMItems).ToString());
JObject o = JObject.Parse(initialJson);
IEnumerable<JToken> keyMs = o.SelectTokens("$..keyM");