Json.NET (Newtonsoft) 解析有点动态的数据 (c#)
Json.NET (Newtonsoft) to parse somewhat dynamic data (c#)
使用 c# - 我有一个有效的 json 字符串,我试图将它解析成一个字典,但我正在努力解决语法问题。
这是我要解析的数据示例:
{
"data": {
"KeyOne": {
"val": "first!"
"fooBar": "invalid data not needed",
},
"anotherKey": {
"val": null
},
"TheThirdKey": {
"val": 999
"fooFooBarBar": "more unneeded data",
},
"KeyKeyKey": {
"val": "super neato something"
},
...
需要根据一些相当具体的规则将其移入 Dictionary<string, object>
:
- 不断变化的元素名称是关键('KeyOne'、'anotherKey'...)——这在数据集中是唯一的
- 对于字典值,我只需要作为'
val
'值的字符串或数字或空值('first',空值, 999, ...)
所以我最终的字典应该是这样的:
"KeyOne" : "first!"
"anotherKey" : null
"TheThirdKey": 999
"KeyKeyKey" : "super neato something"
我尝试使用
的不同变体来解析它
JsonConvert.DeserializeObject<Dictionary<string, object>
我也试过这样遍历 jTokens:
JObject jObject = JObject.Parse(jsonString);
List<JToken> jTokens = jObject["data"].Children().ToList();
foreach (JToken jToken in jTokens) { ...
但经过这么多小时的尝试,我感到很尴尬......希望这可以用 Json.NET 执行,但我还没有弄清楚。
想法?
你可以这样做:
JObject jObject = JObject.Parse(jsonString);
var dataChildren = jObject["data"].Children().Cast<JProperty>();
Dictionary<string, object> result = dataChildren
.ToDictionary(x => x.Name, x => x.Value["val"].Value<JValue>().Value);
你会得到 Dictionary<string,object>
作为结果
使用 c# - 我有一个有效的 json 字符串,我试图将它解析成一个字典,但我正在努力解决语法问题。
这是我要解析的数据示例:
{
"data": {
"KeyOne": {
"val": "first!"
"fooBar": "invalid data not needed",
},
"anotherKey": {
"val": null
},
"TheThirdKey": {
"val": 999
"fooFooBarBar": "more unneeded data",
},
"KeyKeyKey": {
"val": "super neato something"
},
...
需要根据一些相当具体的规则将其移入 Dictionary<string, object>
:
- 不断变化的元素名称是关键('KeyOne'、'anotherKey'...)——这在数据集中是唯一的
- 对于字典值,我只需要作为'
val
'值的字符串或数字或空值('first',空值, 999, ...)
所以我最终的字典应该是这样的:
"KeyOne" : "first!"
"anotherKey" : null
"TheThirdKey": 999
"KeyKeyKey" : "super neato something"
我尝试使用
的不同变体来解析它JsonConvert.DeserializeObject<Dictionary<string, object>
我也试过这样遍历 jTokens:
JObject jObject = JObject.Parse(jsonString);
List<JToken> jTokens = jObject["data"].Children().ToList();
foreach (JToken jToken in jTokens) { ...
但经过这么多小时的尝试,我感到很尴尬......希望这可以用 Json.NET 执行,但我还没有弄清楚。
想法?
你可以这样做:
JObject jObject = JObject.Parse(jsonString);
var dataChildren = jObject["data"].Children().Cast<JProperty>();
Dictionary<string, object> result = dataChildren
.ToDictionary(x => x.Name, x => x.Value["val"].Value<JValue>().Value);
你会得到 Dictionary<string,object>
作为结果