1

JSON オブジェクトがあり、その下にあるルート要素を見つけようとしています。誰かがこれを理解するのを手伝ってくれますか?

{
  "store" : {
      "10162021" : {
         "id" : 812340,
         "properties" : {
            "server" : "server1.example.org",
            "serverip" : "",
         }
      },
      "10162022" : {
         "properties" : {
            "serverip" : "127.0.0.1",
            "server" : "server2.example.org",
         },
         "id" : 859480
      }
   }
}

サーバー名に基づいてルート要素1016202210162021を抽出する必要があります。

以下のような構文を使用しようとしましたが、成功しませんでした

$..*..[?(@.server == server2.example.org)]

提案をいただければ幸いです。

4

1 に答える 1

1

キー「10162022」などを返すか、次のような値を返すかは明確ではありません。

{
   "properties" : {
       "serverip" : "127.0.0.1",
       "server" : "server2.example.org"
   },
   "id" : 859480
}

値を返したい場合は、次の JSONPath が機能するはずです。

$.store[?( @.properties.server=="server2.example.org" )]

キーを返却したい場合、それが可能かどうかは完全にはわかりません. JSONPath は、実際にはキーではなく値を見つけるように設計されています。

キーが必要な場合は、次のように構造を前処理して、キーを値としてオブジェクトに格納することをお勧めします。

{
  "store" : {
      "10162021" : {
         "__key" : "10162021",
         "id" : 812340,
         "properties" : {
            "server" : "server1.example.org",
            "serverip" : ""
         }
      },
      "10162022" : {
         "__key" : "10162022",
         "properties" : {
            "serverip" : "127.0.0.1",
            "server" : "server2.example.org"
         },
         "id" : 859480
      }
   }
}

次に、この JSONPath を使用します。

$.store[?( @.properties.server=="server2.example.org" )].__key
于 2021-02-16T18:43:53.613 に答える