JSON SelectTokens expression



我有一个JSON文件(如下)。我的目标是用unit_ids(例如,在该JSON中,unit_ids是:153470153471178903)和相应的classtype_id(例如,在此JSON中,相应的classtype_id是:CWCWnull)填充字典。(unit_ids是唯一的)

因此,我的字典可能是:{[153470, CW][153471, CW][178903, null]}

但是,在我目前的方法中,有一个问题,因为:"unit_id":null可能像这个文件中的f.e.一样:"178903": null

Dictionary<string, string> unit_id_translate = new Dictionary<string, string>();
var unitIdsTypes = JObject.Parse(unit_ids_json).SelectTokens("*.['classtype_id']");
var unitIdsNumbers = JObject.Parse(unit_ids_json);
List<String> tempForUID = new List<String>();
List<String> tempForVAL = new List<String>();
foreach (var unitIdType in unitIdsTypes)
{
    tempForVAL.Add(unitIdType.ToString());
}
foreach (var unitIdNumber in unitIdsNumbers)
{
    foreach (var tmp44 in unitIdNumber)
    {
        var trimmedNr = unitIdNumber.Cast<JProperty>().Select(o => o.Name);
        foreach (var unitIdNr in trimmedNr)
        {
                tempForUID.Add(unitIdNr);
        }
        break;
    }
}
for (int i = 0; i < tempForUID.Count(); i++)
{
    unit_id_translate.Add(tempForUID.ElementAt(i), tempForVAL.ElementAt(i));
}

我需要帮助,因为我的解决方案崩溃了(超出范围的异常)——unit_idsclasstype_id多——因为null的值。

我能做些什么来解决这个问题?

{
  "153470": {
    "topics": {
      "en": ""
    },
    "classtype_id": "CW",
    "learning_outcomes": {
      "en": ""
    },
    "course_id": "06-DRSOLI0",
    "course_name": {
      "en": "Distributed operating systems"
    },
    "id": 153470,
    "teaching_methods": {
      "en": ""
    }
  },
    "153471": {
    "topics": {
      "en": ""
    },
    "classtype_id": "CW",
    "learning_outcomes": {
      "en": ""
    },
    "course_id": "06-DPROLI0",
    "course_name": {
      "en": "Team project"
    },
    "id": 153471,
    "teaching_methods": {
      "en": ""
    }
  },
    "178903": null,
}

使用Enumerable.ToDictionary():可以轻松做到这一点

        var unit_id_translate = JObject.Parse(unit_ids_json)
            .Properties()
            .ToDictionary(p => p.Name, p => (string)p.Value.SelectToken("classtype_id"));

然后

        Console.WriteLine(JsonConvert.SerializeObject(unit_id_translate));

产生CCD_ 21。

相关内容

  • 没有找到相关文章

最新更新