首页 > 解决方案 > 比较和匹配嵌套的 JSON 值

问题描述

我正在尝试创建一个函数来比较 JSON 列表中的嵌套值。它需要将 final.model 的值与 current.model 进行比较。当模型匹配时,它需要从 final.qty 中减去 current.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"} ]

标签: c#.netjsonlinq

解决方案


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 

推荐阅读