Azure Logic App:プロパティがjsonオブジェクトに存在するかどうかを確認する
次のような「SQLServerGetRecords(V2)」アクションからのJSONがあります。残念ながら、応答にはnull値のフィールドは含まれません。私の例では、「名前」フィールドは一部のアイテムではnullです。
[
{
"@odata.etag": "",
"ItemInternalId": "378fd3bc-0cd4-4171-8e7d-462461086580",
"RowID": 1,
"Name": "1234"
},
{
"@odata.etag": "",
"ItemInternalId": "378fd3bc-0cd4-4171-8e7d-462461086580",
"RowID": 1
}, ...
}
これらのアイテムを繰り返し、各アイテムを別のHTTPエンドポイントに渡したいと思います。
私が使用した場合のアイテム()[「名前」]または項目()?[「name」を]名前フィールドにアクセスするには、それは言って2番目の項目のために失敗します。
プロパティ 'Name'が存在しないため、テンプレート言語式を評価できません。使用可能なプロパティは...
xpath関数をxml関数と組み合わせて値を取得する人がたくさんいます。
https://docs.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference
しかし、xpath(xml(item())、 '/ Name')のような思考を使用すると、次のようなエラーがスローされます。
テンプレート言語関数の「xml」パラメーターが無効です。指定された値をXMLに変換することはできません: 'JSONルートオブジェクトには、属性に変換されるプロパティ' @ odata.etag 'があります。ルートオブジェクトは、属性プロパティを持つことはできません。DeserializeRootElementNameを指定することを検討してください。パス '[' @ odata.etag ']'。 '。参照してくださいhttps://aka.ms/logicexpressions#xml 使用法の詳細については。
アップデート1
私はこれを次の式で動作させました、私は本当にこれが好きではありません
first(xpath(xml(addProperty(json('{}'), 'obj', item())), '//obj/Name[1]/text()'))
私の問題を解決する他の簡単な方法はありますか?前もって感謝します
回答
この問題のために、あなたが「得ると思われる名前」に「値のそれぞれについて、」の応答からループ「のSQLServer GetRecords(V2)を直接」。「JSONの解析」アクションを使用するだけで、この問題を簡単に解決できます。以下の私のロジックアプリを参照してください:
1.「SQLServerGetRecords(V2)」からの応答をシミュレートするために、あなたと同じjsonデータを格納する変数を初期化します。

2.次に、「JSONの解析」アクションを追加してjsondataを解析します。「サンプルペイロードを使用してスキーマを生成する」ボタンをクリックして、jsondataをそこにコピーできます。スキーマが自動的に生成されます。以下に示すスキーマ(注意:スキーマは、これらのフィールドが required
プロパティで必須かどうかを指定します)。
{
"items": {
"properties": {
"@@odata.etag": {
"type": "string"
},
"ItemInternalId": {
"type": "string"
},
"Name": {
"type": "string"
},
"RowID": {
"type": "integer"
}
},
"required": [
"@@odata.etag",
"ItemInternalId",
"RowID"
],
"type": "object"
},
"type": "array"
}

3.今「を使用し、それぞれについてループへの」body
「から解析JSON」と「設定値を」ボックスName
「からプロパティ解析JSON」。

4.ロジックアプリを実行します。エラーメッセージなしで正常に動作します。


JSONを使用している場合:
item()?['Name']