Сравните и сопоставьте вложенные значения JSON

Я пытаюсь создать функцию, которая будет сравнивать вложенные значения в списке JSON. Ему нужно сравнить значения final.model с current.model. Когда модель совпадает, необходимо вычесть current.qty из final.qty и удалить все модели из списка, где qty=0.

Я пробовал это разными способами, но не смог сравнить окончательные модели с текущими моделями.

{"final": [
    {"model": "RRUS-11", "qty": "4"},
    {"model": "RFS ATM192012-0", "qty": "2"},
    {"model": "WCS-IMFQ-AMT-43", "qty": "8"},
    {"model": "SBNHH-1D65A", "qty": "9"} ], 
"current": [
   {"model": "SBNHH-1D65A", "qty": "6"},
    {"model": "RRUS-32 B2", "qty": "4"},
    {"model": "WCS-IMFQ-AMT-43", "qty": "6"},
    {"model": "RRUS-11", "qty": "4"} ]
}

public class Container
        {
            public string model { get; set; }
            public int? qty { get; set; }
        }

var results = JsonConvert.DeserializeObject<Dictionary<string, List<Container>>>(requestBody);

var DetermineProposed = results.Where(x => !string.IsNullOrWhiteSpace(x.Key))
        .Select(x => new { x.Value })

        .ToList();

return new OkObjectResult(DetermineProposed);

This is what the returned DetermineProposed should look:
[ {"model": "WCS-IMFQ-AMT-43", "qty": "2"},
  {"model": "SBNHH-1D65A", "qty": "3"} ]

JSON — это строка. Как только вы проанализируете его, вы больше не будете иметь дело с JSON. В вашем случае вы даже не сравниваете содержимое ключей final и current. Вы должны извлечь это содержимое, прежде чем сможете его сравнить.

Panagiotis Kanavos 14.02.2019 17:34

Используйте пользовательский IComparer<T>. См. MSDN: docs.microsoft.com/en-us/dotnet/api/…

jdweng 14.02.2019 17:39

Спасибо за ваш отзыв!

hayes 14.02.2019 18:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
208
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

JSON — это строка. Как только вы проанализируете его, вы больше не будете иметь дело с JSON. Текущий код даже не извлекает два списка, а тем более не сравнивает их.

Вычисление разница в количествах может быть выполнено с помощью LINQ и объединения двух списков на основе модели:

var results = JsonConvert.DeserializeObject<Dictionary<string, List<Container>>>(json);

var final=results["final"];
var current=results["current"];

var diffs=from f in final
           join c in current on f.model equals c.model
           let diff=new Container{model=f.model,qty=f.qty-c.qty}
           where diff.qty!=0
           select diff;

Результат будет:

model            qty
WCS-IMFQ-AMT-43  2 
SBNHH-1D65A      3 

Это сделало это! Я знал, что упускаю из виду что-то простое. Спасибо!

hayes 14.02.2019 18:24

Другие вопросы по теме

Похожие вопросы

Индекс выходит за пределы после того, как я уже получил доступ к этому индексу менее 10 строк назад
Как получить и использовать индекс каждого члена списка
Разработайте WebService в Visual Studio C# и вызовите его из отдельного решения VS
Использование статической асинхронной задачи для получения поставщика Mac в C# LookupMac (строка MacAddress)
Передача выбора изображения из дочернего окна на главную страницу
Развертывание ASP.Net Core в иерархии серверов IIS для получения информации о строке подключения
Newtonsoft.Json Непредвиденный символ при синтаксическом анализе значения: リ
Как нормализовать отступы, но не разрывы строк при сериализации/чтении XML в С#
Каков правильный метод прямого вызова определенного представления в веб-приложении ASP.NET MVC извне приложения?
Как получить информацию о пользователе для входа после успешного входа в систему из OneDrive API