【问题标题】:Get list with KeyValuePairs from JSON node从 JSON 节点获取带有 KeyValuePairs 的列表
【发布时间】:2017-11-22 11:10:50
【问题描述】:

我有以下 JSON:

{ 
    "data":[{ 
        "from": "2017-11-22T10:00Z",
        "to": "2017-11-22T10:30Z",
        "intensity": {
            "forecast": 322,
            "actual": 343,
            "index": "high"
        }
    }]
}

我想将其中的强度属性提取为KeyValuePair 列表。

我做了什么来访问列表:

JObject parsed = JObject.Parse(JSON);
var list = parsed.SelectToken("data[0].intensity").ToList();

这给了我以下 JToken 对象列表:

"forecast": 322
"actual": 343
"index": "high"

如何将其转换为KeyValuePair<string, string> 列表?

【问题讨论】:

标签: c# .net json wpf keyvaluepair


【解决方案1】:

经过一些额外的搜索,我发现以下帖子给出了最终解决方案的提示:Get Name of JObject in json.net using Linq

我实现了以下解决方案:

var parsed = JObject.Parse(JSON);
var list = parsed.SelectToken("data[0].intensity");
List<KeyValuePair<string, string>> keyvaluelist = new List<KeyValuePair<string, string>>();

foreach (var item in list)
{
    JProperty prop = (JProperty)item;
    string key = prop.Name; 
    string value = (string)prop.Value;
    keyvaluelist.Add(new KeyValuePair<string, string>(key, value));
}

【讨论】:

  • 考虑到情况,'Dictionary' 会不会更合适?
  • JSON 输入将是动态的,因此“data[0].intensity”将是一个变量。当 JSON 具有重复键时,这会使字典成为风险。另外,我使用列表在 SQLite 数据库中创建列/值,因此不需要字典的性能。
  • 我是否理解您期望类似:'"intensity": { "forecast": 322, "forecast": 340 ... }'?您无法控制源对象?
  • 确实,输入来自我无法控制的第三方。由于审计要求,不处理 JSON 不是一种选择。
猜你喜欢
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多