[英]How to check for a particular range of keys exists in json string or not
我有以下 json 字符串數據作為輸入:
string json="{"-1":0,"78":6,"79":6,"80":2,"81":16777215,"82":16777215,"83":1,"84":0,"85":0,"86":"2023/05/07","87":0,"88":0,"89":1,"90":1,"124":1,"16":5,"17":null,"18":null,"19":0,"20":2,"21":2000,"22":0,"23":0,"24":0,"25":0,"26":0,"109":0,"110":0,"29":0,"30":0,"31":0,"32":2000,"33":13710,"34":15710,"135":null}"
我想檢查上面的任何一個鍵是否有 1 到 150 以外的值,以便它可以返回 false。 我怎樣才能在 c# 中實現這一點。 **條件:我不想在這里使用 Json Deserializer。 我試過jSon.Contains("\\"-1\\":")
這僅適用於一個鍵 i,e: -1 。 相反,我想要的是從 1 到 150
理想情況下,您不會嘗試自己解析它,但是由於您不能使用解析器,我想您可以使用Regex
來做到這一點
給定的
var input = "{\"-1\":0,\"78\":6,\"79\":6,\"80\":2,\"81\":16777215,\"82\":16777215,\"83\":1,\"84\":0,\"85\":0,\"86\":\"2023/05/07\",\"87\":0,\"88\":0,\"89\":1,\"90\":1,\"124\":1,\"16\":5,\"17\":null,\"18\":null,\"19\":0,\"20\":2,\"21\":2000,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"109\":0,\"110\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":2000,\"33\":13710,\"34\":15710,\"135\":null}";
var isOutOfRange = Regex.Matches(input, @"""-?\d+""")
.Cast<Match>()
.Select(x => int.Parse(x.Value.Trim('"')))
.Any(x => x < 1 || x > 150);
解釋
帶有負面和正面的回顧(刪除了Quotes )
var isOutOfRange = Regex.Matches(input, @"(?<="")-?\d+(?<!"")")
.Cast<Match>()
.Select(x => int.Parse(x.Value))
.Any(x => x < 1 || x > 150);
解釋
更新
來自評論Jimi建議,在其中一個值被引號括起來的情況下,檢查冒號可能是明智的
在這種情況下,您可能可以將模式修改為以下內容
"-?\d+"(?=:)
(?<=")-?\d+(?<!":)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.