C# 从没有已知结构的JSON中检索所有JSON键的值
我从某个端点获取JSON,我只知道它将包含名为“x”的数组,该数组可以包含其他数组、JSON属性等的所有内容 现在,我想从所有键中检索值并将其连接成一个字符串 我发现了这一点,但当它遇到属性数组时,它会按原样提供给我,如下所示:C# 从没有已知结构的JSON中检索所有JSON键的值,c#,json,.net,json.net,C#,Json,.net,Json.net,我从某个端点获取JSON,我只知道它将包含名为“x”的数组,该数组可以包含其他数组、JSON属性等的所有内容 现在,我想从所有键中检索值并将其连接成一个字符串 我发现了这一点,但当它遇到属性数组时,它会按原样提供给我,如下所示: "test": { "test1": "tea", "test2": "tt", "foo": "&qu
"test": {
"test1": "tea",
"test2": "tt",
"foo": "",
"bar": "48f7c3284ca0",
"random": "Harry",
"anything": "Potter"
},
我想从上面检索值,并将它们连接成字符串,如下所示:
茶tt 48f7c3284ca0哈利波特
换句话说,我想从泛型JSON中foreach每个键,如果它没有子级,则获取它的值并继续foreach
这是测试输出
如果字段是基元类型,则可以使用如下内容:
dynamic stuff = JsonConvert.DeserializeObject("{'test1':'tea','test2':'tt','foo':'','bar':'48f7c3284ca0','random':'Harry','anything':'Potter'}");
List<string> resultValues = new List<string>();
foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(stuff))
{
resultValues.Add(prop.GetValue(stuff).ToString());
}
我会在原始字符串中使用正则表达式: (\s*:\s*"?)(\s*[\w\.]*)("?\s*) 深度并不重要,只要输入是有效的JSON
必须过滤匹配列表以排除组1等于的所有匹配:这意味着该值既不是字符串也不是数字。只需枚举测试节点的属性值。您应该提供一段特定的JSON,涵盖所有类型的预期输入/输出。听起来不错,但在您提供的演示中,并非所有值都匹配。例如,obj.k20.k200有uz值,但不匹配:/这与问题的要求明显不同。让我看看……谢谢你,亚历克斯,虽然我选择了其他答案,但你的回答也很好。 (\s*:\s*"?)(\s*[\w\.]*)("?\s*)
{
test: {
"emptystr": "",
"str": "p",
"num": 6,
"obj": {
"k20": {
"k200": "uz"
}
},
"arr": [ 2, 3, 4 ],
"str1": " asd",
"num1": 0.33445,
}
}