【问题标题】:Accessing property from Json Array从 Json 数组访问属性
【发布时间】:2021-03-26 00:06:50
【问题描述】:

我有以下数组:

{
   "customizedData":[
      {
         "key":"SubscriptionId",
         "value":"xxxxxxxxxxxxxxxx"
      },
      {
         "key":"OfferId",
         "value":"xxxxxxxxxxxxxx"
      },
      {
         "key":"SubscriptionName",
         "value":"DYNAMICS 365 BUSINESS CENTRAL TEAM MEMBER"
      },
      {
         "key":"Quantity",
         "value":"6"
      },
      {
         "key":"Status",
         "value":"Suspended"
      },
      {
         "key":"PartnerOnRecord",
         "value":"None"
      }
   ]
}

如何访问关键元素:

"key": "订阅名称",
"value": "DYNAMICS 365 商业中心团队成员"

目前我使用:(string)t["customizedData"][2]["value"]

有没有更好的方法?

【问题讨论】:

  • 你能分享到目前为止你尝试了什么吗?
  • 是 C#,我猜对了吗?
  • 您使用什么库来处理 json?是 Json.NET 吗?请添加标签。
  • @AlexanderPetrov 其标记为 c# 所以我会这么认为?
  • 是否反序列化为像public partial class KeyValueThing { [J("customizedData")] public List<CustomizedDatum> CustomizedData { get; set; } } public partial class CustomizedDatum { [J("key")] public string Key { get; set; } [J("value")] public string Value { get; set; } } 这样的强类型并像KeyValueThing.CustomizedData.FirstOrDefault(x=> x.Key=="MyKey") 这样简单地过滤可行?

标签: c# arrays json linq


【解决方案1】:

假设您正在使用 Json.net,并且您不想为其创建强类型,因此您可以使用 SelectToken with JSONPath

t.SelectToken("$.customizedData[?(@.key == 'SubscriptionName')].value").ToString();

【讨论】:

    【解决方案2】:

    如果您使用的是Newtonsoft.Json nuget,则可以使用辅助函数来完成。首次使用 var jo = JObject.Parse(jsonContent); 进行解析,并将其传递给辅助函数 GetValueFromJson(jo, "SubscriptionName", "customizedData"),使用此辅助函数:

        private string GetValueFromJson(JObject jo, string key, string rootKey)
        {
            var value = jo[rootKey].Children()
                                            .Where(i => i["key"].ToString() == key)
                                            .Select(i => i["value"].ToString())
                                            .FirstOrDefault();
            return value;
        }
    

    【讨论】:

    • 这还不错,但我认为最好将JObject 作为第一个参数传入。否则,如果您想在同一个 JSON 上针对不同的键多次使用该方法,您最终每次都要重新解析 JSON。最好解析一次,然后提取、提取、提取。
    猜你喜欢
    • 2016-04-07
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2016-07-12
    相关资源
    最近更新 更多