JSON SelectTokens表达式

时间:2016-01-08 19:16:07

标签: c# json json.net

我有一个JSON文件(如下)。我的目标是,用<form id='publishForm'> <input type=submit.... </form> $("#publishForm").submit(function (event) { alert("Handler for .submit() called."); event.preventDefault(); )}; (此JSON unit_ids中的fe:unit_ids153470153471)以及相应的{{1}填写字典。 (此JSON对应178903中的fe为:classtype_idclasstype_idCW)。 (CW是唯一的)

所以f.e.我的字典可能是:nullunit_ids{[153470, CW]

但是在我目前的方法中存在一个问题,因为有可能:[153471, CW]就像f.e.在此文件中:[178903, null]}

"unit_id":null

我需要帮助,因为我的解决方案崩溃(超出范围异常) - "178903": nullDictionary<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

1 个答案:

答案 0 :(得分:0)

您可以使用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));

生成{"153470":"CW","153471":"CW","178903":null}