C# JSON SelectTokens表达式
我有一个JSON文件(如下)。我的目标是用C# JSON SelectTokens表达式,c#,json,json.net,C#,Json,Json.net,我有一个JSON文件(如下)。我的目标是用unit\u id(例如,在这个JSON中unit\u id是:153470,153471和178903)和相应的classtype\u id(例如,在这个JSON中对应的classtype\u id是:CW,CW,null)。(unit_id是统一的) 所以我的字典可能是:{[153470,CW],[153471,CW],[178903,null]} 但是,在我目前的方法中存在一个问题,因为有可能:“unit\u id”:null与此文件中的f.e.类
unit\u id
(例如,在这个JSON中unit\u id
是:153470
,153471
和178903
)和相应的classtype\u id
(例如,在这个JSON中对应的classtype\u id
是:CW
,CW
,null
)。(unit_id
是统一的)
所以我的字典可能是:{[153470,CW]
,[153471,CW]
,[178903,null]}
但是,在我目前的方法中存在一个问题,因为有可能:“unit\u 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));
}
您可以使用以下工具轻松完成此操作: 然后 产生
{“153470”:“CW”,“153471”:“CW”,“178903”: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,
}
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));