我有一个JSON文件(如下)。我的目标是用unit_ids
(例如,在该JSON中,unit_ids
是:153470
、153471
和178903
)和相应的classtype_id
(例如,在此JSON中,相应的classtype_id
是:CW
、CW
和null
)填充字典。(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_ids
比classtype_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。