2016-01-07 3 views
0

Я получаю xml-вывод, тогда я конвертирую этот xml в json object.the формат приведен ниже.Как извлечь JSON Array из json в mulesoft

{ 
"SOAP-ENV:Envelope": { 
    "@xmlns:SOAP-ENV": "http://schemas.xmlsoap.org/soap/envelope/", 
    "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance", 
    "@xmlns:xsd": "http://www.w3.org/2001/XMLSchema", 
    "SOAP-ENV:Body": { 
     "rpc:TestExampleResponse": { 
      "@xmlns:rpc": "http://Test.com/asi/", 
      "TestMessage": { 
       "listOfTESTS": { 
        "@xmlns:xmlns": "http://www.Test.com/xml/TEST", 
        "TESTS": [{ 
          "id": "1", 
          "lastSyncDate": "12/16/2015 07:06:38", 
          "listOfTESTsyncrealtimeChild": null 
         }, { 
          "id": "2", 
          "lastSyncDate": "12/16/2015 07:06:38", 
          "listOfTESTsyncrealtimeChild": null 
         } 

        ] 
       } 
      } 
     } 
    } 
} 
} 

я хочу, чтобы извлечь массив из теста JSON выход в Mulesoft.I не знаю, как извлечь этот массив в mulesoft.Thanks заранее

+0

Я попытался Xpath, но получаю следующее выполнение ошибки выражение «xpath3 («/SOAP-ENV: Envelope », полезная нагрузка,« STRING »)« не удалось. (Org.mule.api.expression.ExpressionRuntimeException). Полезная нагрузка сообщения имеет тип: String –

+0

Вы не можете использовать XPATH, потому что полезная нагрузка не принадлежит XML. Вы можете найти [мой ответ] (http://stackoverflow.com/questions/34647518/how-to-extract-json-array-from-json-in-mulesoft/34649584#34649584) полезный –

ответ

-2

Вы можете написать собственный трансформатор, как показано ниже. Этот трансформатор использует зависимость Jackson (com.fasterxml.jackson).

Трансформатор возвращает список строк, где каждая строка представляет элемент вашего массива TESTS.

public class JsonArrayExtractor extends AbstractTransformer { 

    private final ObjectMapper mapper = new ObjectMapper(); 
    private final String testsNodeJsonPointer = "/SOAP-ENV:Envelope/SOAP-ENV:Body/rpc:TestExampleResponse/TestMessage/listOfTESTS/TESTS"; 

    public JsonArrayExtractor() { 
     registerSourceType(DataTypeFactory.STRING); 
    } 

    @Override 
    protected Object doTransform(Object src, String enc) throws TransformerException { 
     String payload = Objects.toString(src); 

     JsonNode root; 
     try { 
      root = mapper.readTree(payload); 
     } catch (IOException e) { 
      throw new TransformerException(this, e); 
     } 

     List<String> testsList = new ArrayList<>(); 

     JsonNode testsNode = root.at(JsonPointer.valueOf(testsNodeJsonPointer)); 
     if (testsNode instanceof ArrayNode) { 
      ArrayNode testsArrayNode = (ArrayNode) testsNode; 
      for (JsonNode test : testsArrayNode) { 
       testsList.add(test.toString()); 
      } 
     } 
     return testsList; 
    } 
} 

И вы можете использовать вышеуказанный трансформатор в своем потоке, как показано ниже.

<custom-transformer class="org.ram.JsonArrayExtractor" doc:name="extractTestsArray"/> 
0

Вы можете использовать Dataweave (Transform компонент Message в AnyPoint Studio)

(Mule EE)

Посмотрите документацию:

https://docs.mulesoft.com/mule-user-guide/v/3.7/using-dataweave-in-studio

Пример скрипта для ввода:

%dw 1.0 
%input payload application/json 
%output application/json 
--- 
TESTS: payload."SOAP-ENV:Envelope"."SOAP-ENV:Body"."rpc:TestExampleResponse".TestMessage.listOfTESTS.TESTS map ((tEST , indexOfTEST) -> { 
     id: tEST.id, 
     lastSyncDate: tEST.lastSyncDate, 
     listOfTESTsyncrealtimeChild: tEST.listOfTESTsyncrealtimeChild 
}) 

Выход при использовании %output application/json:

{ 
    "TESTS": [ 
    { 
     "id": "1", 
     "lastSyncDate": "12/16/2015 07:06:38", 
     "listOfTESTsyncrealtimeChild": null 
    }, 
    { 
     "id": "2", 
     "lastSyncDate": "12/16/2015 07:06:38", 
     "listOfTESTsyncrealtimeChild": null 
    } 
    ] 
} 

Выход при использовании %output application/java:

{TESTS=[{id=1, lastSyncDate=12/16/2015 07:06:38, listOfTESTsyncrealtimeChild=null}, {id=2, lastSyncDate=12/16/2015 07:06:38, listOfTESTsyncrealtimeChild=null}]} 
Смежные вопросы