【问题标题】:Checking for key name in nested json检查嵌套 json 中的键名
【发布时间】:2015-05-05 07:31:01
【问题描述】:

我需要检查 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"
  },

我认为这是我得到的最接近的,但它总是错误的(即使我搜索现有密钥): content 是一个 JObject。

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

编辑:我已将键名更改为“质量”,以澄清问题。 我还将使用另一个包含键“date”而不是“from”和“to”的 json 文件。分开我想知道“日期”是否存在的文件。

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 假设这写正确,你仍然没有名为“date”的属性,所以你会得到一个false值并不奇怪。也许不好的例子?解释你的预期输出。还是应该找到“updated”?
  • 坏例子..当我尝试搜索现有密钥时,将“日期”更改为“质量”,然后我希望它是真的。

标签: c# json linq lambda


【解决方案1】:

如果要检查的属性总是属于value属性中的一个项目,那么你可以这样做:

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

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

【讨论】:

  • 太漂亮了!它正在工作!有声望的人,请投票给这个答案。
  • @user3741174 如果它工作正常,并且您很满意,请接受它作为answer
【解决方案2】:

json 中不存在日期。这就是为什么你在其中一个 cmets 中提到的错误。 如果要搜索key:"to"

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

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多