簡體   English   中英

如何檢查json字符串中是否存在特定范圍的鍵

[英]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}";

選項1

var isOutOfRange = Regex.Matches(input, @"""-?\d+""")
                        .Cast<Match>()
                        .Select(x => int.Parse(x.Value.Trim('"')))
                        .Any(x => x < 1 || x > 150);

解釋

在此處輸入圖片說明

在此處輸入圖片說明


選項 2

帶有負面正面的回顧(刪除了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM