在嵌套的JSON中检查键名

3

我需要检查一个 JSON 文件中是否存在一个键名,但是我不知道如何实现。

JSON 文件:

{
  "value": [
    {
      "from": 1430611201000,
      "to": 1430697600000,
      "ref": "2015-05-03",
      "value": "8.4",
      "quality": "Y"
    }
  ],
  "updated": 1430726400000,
  "parameter": {
    "key": "2",
    "name": "Lufttemperatur",
    "summary": "medelvärde 1 dygn, 1 gång/dygn, kl 00",
    "unit": "degree celsius"
  },

我认为这是我能够得到的最接近的结果,但它总是错误的(即使我搜索一个已经存在的键):内容是JObject。

var searchDate = content.Properties().Select(p => p.Value).Children().Any(p=>p.Contains("quality"));

编辑:我已将键名更改为“quality”,以澄清问题。我还将使用另一个包含键“date”而不是“from”和“to”的JSON文件。为了区分这些文件,我想知道“date”是否存在。


我已经编辑了你的标题。请参考“问题的标题应该包含“标签”吗?”,在那里达成共识是“不应该”。 - John Saunders
假设这段代码是正确的,您仍然没有名为“_date_”的属性,因此得到_false_值并不奇怪。也许这只是一个糟糕的示例?请解释您期望的输出。或者这应该找到“updated”吗? - Mackan
坏的例子… 当我尝试搜索现有的键时,将“日期”更改为“质量”,然后我希望它是正确的。 - user3741174
2个回答

4

如果要检查的属性始终属于value属性中的一个项目,则可以按照以下方式操作:

var isQualityExists = 
            content["value"].Any(v => ((JObject)v).Properties()
                                                  .Any(p => p.Name.Contains("quality"))
                                );

否则,您可能需要创建一个函数,递归检查整个 JObject 是否存在特定属性名称。

1
太棒了!它正在运行! 有声望的人,请投票支持这个答案。 - user3741174
1
如果它能正常工作并且您感到满意,那么请接受它作为“答案”。 - Mackan

0

JSON中不存在日期,这就是为什么你会得到一个错误响应,正如其中一个评论中所提到的那样。 如果你想要搜索关键字:"to"

if("to" in json_object) 
{
//your logic goes here
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接