2017-05-25 4 views
0

Cela semble plutôt évident, mais cela ne fonctionne pas pour moi. J'essaye de construire une solution dans l'application de logique sur Microsoft Azure mais je suis coincé pour convertir l'objet de JSON en XML.Application Azure Logic - Conversion JSON vers XML

Mon exigence est d'exécuter une procédure stockée et enregistrer la réponse au format XML. Par défaut Exécuter SQL stockée renvoie Action Procédure la réponse au format JSON ci-dessous,

{ 
"OutputParameters": { }, 
"ReturnCode": 0, 
"ResultSets": { 
"Table1": [ 
     { 
     "ProductID": 680, 
     "Name": "HL Road Frame - Black, 58", 
     "ProductNumber": "FR-R92B-58", 
     "Color": "Black", 
     "StandardCost": 1059.31, 
     "ListPrice": 1431.5, 
     "Size": "58", 
     "Weight": 1016.04 
     }, 
     { 
     "ProductID": 706, 
     "Name": "HL Road Frame - Red, 58", 
     "ProductNumber": "FR-R92R-58", 
     "Color": "Red", 
     "StandardCost": 1059.31, 
     "ListPrice": 1431.5, 
     "Size": "58", 
     "Weight": 1016.04 
     }] 
} 
} 

réponse ci-dessus est ensuite utilisé dans l'action « Créer Blob » pour enregistrer la réponse dans un blob sur Azure.

Cette link indique que l'application logique fournit une fonction xml pour convertir une chaîne ou un objet JSON en XML, mais cela ne semble pas fonctionner comme prévu. J'ai essayé ci-dessous l'expression, mais rien ne fonctionne,

  1. @xml (corps ('Execute_stored_procedure') [ 'Les ResultSets']?)

ERREUR: paramètre de la fonction de langage de template 'xml' est pas valide. La valeur fournie ne peut pas être convertie en XML: 'Ce document contient déjà un noeud' DocumentElement '.'. S'il vous plaît voir https://aka.ms/logicexpressions#xml pour les détails d'utilisation.

  1. @xml (corps ('Execute_stored_procedure') [ 'Les ResultSets'] [ 'Table1']?)

ERREUR: La fonction langage de template 'xml' attend son paramètre est une chaîne ou un objet. La valeur fournie est de type 'Array'. S'il vous plaît voir https://aka.ms/logicexpressions#xml pour les détails d'utilisation.

Tout ce que je veux est de convertir ce JSON à un XML comme ci-dessous,

<Root><Product>....</Product><Product>....</Product></Root> 

La solution alternative pourrait être l'appel d'une fonction Azure et convertir cette JSON XML dans le code C#. Mais avant d'essayer une autre solution, je veux savoir ce que je fais de mal.

Répondre

1

Après avoir posté la question j'ai analysé plus loin le problème et a constaté que je passais le mauvais objet JSON dans la fonction @xml.

L'objet JSON correcte doit être comme ci-dessous,

{ 
"ResultSets": { 
"Table1": [ 
     { 
     "ProductID": 680, 
     "Name": "HL Road Frame - Black, 58", 
     "ProductNumber": "FR-R92B-58", 
     "Color": "Black", 
     "StandardCost": 1059.31, 
     "ListPrice": 1431.5, 
     "Size": "58", 
     "Weight": 1016.04 
     }, 
     { 
     "ProductID": 706, 
     "Name": "HL Road Frame - Red, 58", 
     "ProductNumber": "FR-R92R-58", 
     "Color": "Red", 
     "StandardCost": 1059.31, 
     "ListPrice": 1431.5, 
     "Size": "58", 
     "Weight": 1016.04 
     }] 
} 
} 

S'il vous plaît noter que je devais enlever ci-dessous pour les lignes,

"OutputParameters": { }, 
"ReturnCode": 0, 

donc essayé avec ci-dessous l'expression et cela a fonctionné,

@xml(json(concat('{\"ResultSets\":',body('Execute_stored_procedure').ResultSets,'}'))) 

Maintenant, je dois modifier légèrement cette expression pour obtenir le XML final. J'espère que cela aide quelqu'un.