Элемент с тем же ключом уже добавлен. Ключ: ivttesting

#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 );  }  } }