App per la logica di Azure: verifica dell'esistenza di una proprietà in un oggetto JSON
Ho un JSON proveniente da un'azione "SQLServer GetRecords (V2)" come la seguente. Sfortunatamente, la risposta non conterrà campi con valori nulli. Nel mio esempio, il campo "Nome" è nullo per alcuni elementi.
[
{
"@odata.etag": "",
"ItemInternalId": "378fd3bc-0cd4-4171-8e7d-462461086580",
"RowID": 1,
"Name": "1234"
},
{
"@odata.etag": "",
"ItemInternalId": "378fd3bc-0cd4-4171-8e7d-462461086580",
"RowID": 1
}, ...
}
Voglio iterare questi elementi e passare ogni elemento a un altro endpoint HTTP.
Quando utilizzo item () ['Name'] o item ()? ['Name'] per accedere al campo del nome, fallirà per il secondo elemento che dice
L'espressione del linguaggio del modello non può essere valutata perché la proprietà "Nome" non esiste, le proprietà disponibili sono ...
Vedo molte persone che usano la funzione xpath combinata con la funzione xml per recuperare il valore.
https://docs.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference
Ma quando uso alcuni pensieri come xpath (xml (item ()), '/ Name') , verrà generato un errore che dice
Il parametro "xml" della funzione del linguaggio del modello non è valido. Il valore fornito non può essere convertito in XML: "L'oggetto radice JSON ha la proprietà" @ odata.etag "che verrà convertita in un attributo. Un oggetto radice non può avere proprietà di attributo. Valuta la possibilità di specificare un DeserializeRootElementName. Percorso "[" @ odata.etag "]". ". Perfavore guardahttps://aka.ms/logicexpressions#xml per i dettagli sull'utilizzo.
Aggiorna 1
L'ho capito lavorando con la seguente espressione, davvero non mi piace
first(xpath(xml(addProperty(json('{}'), 'obj', item())), '//obj/Name[1]/text()'))
C'è un altro modo semplice per risolvere il mio problema. Grazie in anticipo
Risposte
Per questo problema, sembra che tu ottenga il valore " Name " nel ciclo " For each " dalla risposta di " SQLServer GetRecords (V2) " direttamente. Possiamo semplicemente usare un'azione " Parse JSON " per risolvere facilmente questo problema. Fare riferimento alla mia app per la logica di seguito:
1. Inizializzo una variabile per memorizzare gli stessi dati json dei tuoi per simulare la risposta da " SQLServer GetRecords (V2) ".

2. Quindi aggiungere l'azione " Parse JSON " per analizzare jsondata. Possiamo fare clic sul pulsante " Usa payload di esempio per generare lo schema " e copiare jsondata al suo interno. Genererà automaticamente lo schema. Lo schema mostrato come di seguito ( nota : lo schema specifica se questi campi sono obbligatori nella required
proprietà ).
{
"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. Ora usa " For each " per eseguire il loop body
da " Parse JSON " e imposta la casella " Value " con la Name
proprietà da " Parse JSON ".

4. Eseguire l'app per la logica, funziona correttamente senza alcun messaggio di errore.


Se lavori con JSON:
item()?['Name']