c# - 比较和匹配嵌套的 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"} ]
解决方案
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
推荐阅读
- scheduled-tasks - 读取 csv 文件内容并传递到 json 数组以通过 HTTP Post Action 发布 - Microsoft Flows
- html - 无法以 PDF 格式呈现图像(Puppeteer)
- javascript - 即使在添加catch块之后,nodejs中的“UnhandledPromiseRejectionWarning”
- java - spring-cloud-gateway:java.lang.IndexOutOfBoundsException
- javascript - 无法创建发布请求
- selenium - 如何并行执行多个测试套件?
- python - 在循环中向矩阵添加列
- mysql - 在 InnoDB 中使用 MAX 模拟自动增量的最快和最安全的方法
- react-native - React-native:onPress 动作正在阻止 Swipe 动作
- asp.net - 如何为弹出错误消息设置焦点?