#c# #.net-core
Вопрос:
У меня есть сценарий, в котором я читаю данные из очень большой строки json и отображаю данные с помощью пары ключ и значение, по какой-то причине внутри файла JSON есть несколько ключей с одинаковым именем ключа.
В настоящее время это мой код для считывания ключей и их значений и отображения его на веб-странице
public IActionResult Entry(string id) { var entry = _service.GetALLEntry(id); JArray json = JArray.Parse(entry.DataContent); Dictionarylt;string, stringgt; dict = new Dictionarylt;string, stringgt;(); foreach (JValue item in json) { JObject js = JObject.Parse(item.Value.ToString()); foreach (var _it in js) { if (_it.Key != "fields") continue; foreach (var _ in _it.Value) { dict.Add(_.Valuelt;stringgt;("key") "||" _.Valuelt;stringgt;("label"), _.Valuelt;stringgt;("value")); } } } return View(dict); }
Как я могу переименовать ключи с похожим именем в .netcore на другое имя, не редактируя ключи в большом файле JSON?
Комментарии:
1.
var _
— не используйте подчеркивания в качестве имен переменных, потому что это соглашение для отбрасывания .2.
if (_it.Key != "fields") continue;
lt;— Пожалуйста , подтвердите, что вы хотите только"fields"
, в вашем посте с вопросом не сказано.3.
JObject.Parse(item.Value.ToString());
lt;— зачем ты это делаешь? Это бессмысленно…4. Почему он называется
dicts
(т. е. множественным числом), когда это один объект словаря?5. Привет @Dai да, я хочу поля, я обновил до одного,
Ответ №1:
Как я могу переименовать ключи с похожим именем в .netcore на другое имя, не редактируя ключи в большом файле JSON?
Добавьте какой-нибудь счетчик к ключу, когда вы сохраните его в словаре, код ниже-это idx
значение из .Select
перегрузки Linq:
var entry = _service.GetALLEntry(id); JArray jarray = JArray.Parse( entry.DataContent ); Dictionarylt;string, stringgt; dict = new Dictionarylt;string, stringgt;(); foreach( ( JObject obj, Int32 idx ) in jarray.OfTypelt;JObjectgt;().Select( ( jo, idx ) =gt; ( jo, idx ) ) ) { if( obj.Property( "fields") is JProperty fp amp;amp; fp.Value is JObject fieldsObj ) { String? key = fieldsObj.Property( "key" ); String? value = fieldsObj.Property( "label" ); if( !String.IsNullOrWhiteSpace( key ) ) { String dictKey = String.Format( CultureInfo.InvariantCulture, "{0}_{1:d}", key, idx ); dict.Add( dictKey, value ); } } }