ロジックアプリを利用していて、このエラーにかなり苦戦したのでその解決方法をまとめてみました。
また、PowerAutomateでも同じような挙動になるかと思いますので参考にしてもらえればと思います。
※今回私が遭遇したエラーの原因は、複数あるエラーの中の1つだと思いますので、原因が異なる場合にはトラブルシューティングする際の確認すべきポイントとして参考にしていただければと思います。
こんなエラーが出る
私の場合はロジックアップの [HTTP] にて仮想マシン一覧を取得して、その取得結果を「JSONの解析」を利用し、変数として利用しようとしたときにこのエラーが出てきました。
実行結果の画面からエラー表示を見てみると、以下のように表示されている状況です。
また、エラーの出力の中身は以下のようになっていました。
[
{
"message": "Required properties are missing from object: properties.",
"lineNumber": 0,
"linePosition": 0,
"path": "value[6].properties.networkProfile.networkInterfaces[0]",
"value": [],
"schemaId": "#/properties/value/items/properties/properties/properties/networkProfile/properties/networkInterfaces/items",
"errorType": "required",
"childErrors": []
}
]
原因は?
今回の原因は、取得した結果(コンテンツ)の中に「JSONの解析」で定義したスキーマの値が存在しないものがあるからでした。
エラー表示を日本語に直訳してみると、
3行目は「必要なプロパティがオブジェクトにありません:プロパティ。」となります。
"message": "Required properties are missing from object: properties.",
また、8~10行目を見てみるとエラーに関連する場所とエラータイプが表示されていました。
"schemaId":
"#/properties/value/items/properties/properties/properties/networkProfile/properties/networkInterfaces/items",
"errorType": "required",
なので、さらにかみ砕いて原因を説明すると、スキーマ内で「この値はないとダメだ」と [required] というパラメータで定義した値が、取得した結果(コンテンツ)の中になかったために起きたエラーでした。
解決策
従って今回はこの [required] として定義された [properties] というパラメータを削除することで解決することができました。
参考までに私がエラーが出た時に利用していたスキーマを記載しておきます。
また、修正箇所についても★印で記載しています。
●エラーが出た時に設定していたスキーマ
{
"properties": {
"value": {
"items": {
"properties": {
"id": {
"type": "string"
},
"location": {
"type": "string"
},
"name": {
"type": "string"
},
"plan": {
"properties": {
"name": {
"type": "string"
},
"product": {
"type": "string"
},
"publisher": {
"type": "string"
}
},
"type": "object"
},
"properties": {
"properties": {
"diagnosticsProfile": {
"properties": {
"bootDiagnostics": {
"properties": {
"enabled": {
"type": "boolean"
}
},
"type": "object"
}
},
"type": "object"
},
"hardwareProfile": {
"properties": {
"vmSize": {
"type": "string"
}
},
"type": "object"
},
"networkProfile": {
"properties": {
"networkInterfaces": {
"items": {
"properties": {
"id": {
"type": "string"
},
"properties": {
"properties": {
"deleteOption": {
"type": "string"
}
},
"type": "object"
}
},
"required": [
"id",
"properties" ←★★これが不要だった★★
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"osProfile": {
"properties": {
"adminUsername": {
"type": "string"
},
"allowExtensionOperations": {
"type": "boolean"
},
"computerName": {
"type": "string"
},
"requireGuestProvisionSignal": {
"type": "boolean"
},
"secrets": {
"type": "array"
},
"windowsConfiguration": {
"properties": {
"enableAutomaticUpdates": {
"type": "boolean"
},
"enableVMAgentPlatformUpdates": {
"type": "boolean"
},
"patchSettings": {
"properties": {
"assessmentMode": {
"type": "string"
},
"enableHotpatching": {
"type": "boolean"
},
"patchMode": {
"type": "string"
}
},
"type": "object"
},
"provisionVMAgent": {
"type": "boolean"
}
},
"type": "object"
}
},
"type": "object"
},
"provisioningState": {
"type": "string"
},
"storageProfile": {
"properties": {
"dataDisks": {
"type": "array"
},
"imageReference": {
"properties": {
"exactVersion": {
"type": "string"
},
"offer": {
"type": "string"
},
"publisher": {
"type": "string"
},
"sku": {
"type": "string"
},
"version": {
"type": "string"
}
},
"type": "object"
},
"osDisk": {
"properties": {
"caching": {
"type": "string"
},
"createOption": {
"type": "string"
},
"deleteOption": {
"type": "string"
},
"managedDisk": {
"properties": {
"id": {
"type": "string"
}
},
"type": "object"
},
"name": {
"type": "string"
},
"osType": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"timeCreated": {
"type": "string"
},
"vmId": {
"type": "string"
}
},
"type": "object"
},
"resources": {
"items": {
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"type": "array"
},
"tags": {
"properties": {},
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"name",
"id",
"type",
"location",
"properties"
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
[properties] というパラメータを削除後に実行すると、以下のように正常に実行できました。
さいごに
私の場合、一度httpの出力結果を取得したうえで、その出力結果を「JSONの解析」のサンプルのペイロードとして読み込ませてスキーマを作成したので、間違っているところがどこなのか全然わからずに苦戦していました。。
ですが、冷静になってエラー表示を見て少し納得できましたし解決することができました。
こういう時は「慌てずにエラー表示を見てその通りに改善するとよい」という、良い教訓になりました。