Zasada XMLtoJSON

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Co

Ta zasada konwertuje wiadomości z formatu extensible Markup Language (XML) na JavaScript Object Notation (JSON), który daje kilka opcji kontrolowania sposobu działania wiadomości dokonali konwersji.

Zakładając, że intencją jest przekonwertowanie odpowiedzi w formacie XML na format JSON odpowiedź, zasada będzie dołączona do przepływu odpowiedzi (np. Response / ProxyEndpoint / Postflow).

Informacje

W typowym scenariuszu zapośredniczenia zasady z JSON na XML w przepływie żądań przychodzących są często w połączeniu z zasadą XML na JSON w przepływie odpowiedzi wychodzących. Dzięki takiemu połączeniu zasad interfejs JSON API może być widoczny dla usług backendu, które natywnie obsługują tylko format XML.

Na potrzeby scenariuszy, w których interfejsy API są wykorzystywane przez różne aplikacje klienckie, które mogą wymagać kodu JSON lub XML, format odpowiedzi można ustawić dynamicznie, konfigurując format JSON na XML i XML na JSON warunkowego wykonania. Zobacz Zmienne i warunki przepływu , by zademonstrować taki scenariusz.


Przykłady

Szczegółowe informacje o konwertowaniu plików JSON i XML znajdziesz na http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html.

Konwertowanie odpowiedzi

<XMLToJSON name="ConvertToJSON">
  <Options>
  </Options>
  <OutputVariable>response</OutputVariable>
  <Source>response</Source>
</XMLToJSON>

Ta konfiguracja – minimalna konfiguracja wymagana do konwertowania formatu XML na JSON – pobiera odpowiedź w formacie XML jako źródło, a następnie tworzy Wiadomość w formacie JSON umieszczana w zmiennej wyjściowej response. Krawędź automatycznie używa zawartości tej zmiennej jako komunikatu w następnym kroku przetwarzania.


Odwołanie do elementu

Poniżej znajdziesz elementy i atrybuty, które możesz skonfigurować w tej zasadzie.

<XMLToJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">
    <DisplayName>XML to JSON 1</DisplayName>
    <Source>response</Source>
    <OutputVariable>response</OutputVariable>
    <Options>
        <RecognizeNumber>true</RecognizeNumber>
        <RecognizeBoolean>true</RecognizeBoolean>
        <RecognizeNull>true</RecognizeNull>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName>
        <NamespaceSeparator>***</NamespaceSeparator>
        <TextAlwaysAsProperty>true</TextAlwaysAsProperty>
        <TextNodeName>TEXT</TextNodeName>
        <AttributeBlockName>FOO_BLOCK</AttributeBlockName>
        <AttributePrefix>BAR_</AttributePrefix>
        <OutputPrefix>PREFIX_</OutputPrefix>
        <OutputSuffix>_SUFFIX</OutputSuffix>
        <StripLevels>2</StripLevels>
        <TreatAsArray>
            <Path unwrap="true">teachers/teacher/studentnames/name</Path>
        </TreatAsArray>
    </Options>
    <!-- Use Options or Format, not both -->
    <Format>yahoo</Format>
</XMLToJSON>

&lt;XMLtoJSON&gt; atrybuty

<XMLtoJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1"> 

W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślny Obecność
name

Wewnętrzna nazwa zasady. Wartość atrybutu name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekracza 255 znaków.

Opcjonalnie możesz użyć elementu <DisplayName> do oznaczenia zasady jako edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw jako false, aby w przypadku niepowodzenia zasady zwracany był błąd. To normalne w przypadku większości zasad.

Ustaw jako true, aby wykonywanie przepływu było kontynuowane nawet po zastosowaniu zasady niepowodzenie.

fałsz Opcjonalnie
enabled

Aby egzekwować zasadę, ustaw wartość true.

Aby wyłączyć zasadę, ustaw wartość false. Te zasady nie będą jest wymuszane nawet wtedy, gdy jest ono połączone z przepływem.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

fałsz Wycofano

&lt;DisplayName&gt; element

Używaj oprócz atrybutu name do oznaczania zasady w edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

<DisplayName>Policy Display Name</DisplayName>
Domyślny

Nie dotyczy

Jeśli pominiesz ten element, atrybut name zasady otrzyma wartość .

Obecność Opcjonalnie
Typ Ciąg znaków

&lt;Source&gt; element

zmienną, żądanie lub odpowiedź zawierającą komunikat XML, na który chcesz przekonwertować kod. JSON.

Nagłówek HTTP Content-type komunikatu źródłowego musi być ustawiony na application/xml; w przeciwnym razie zasada nie jest egzekwowana.

Jeśli <Source> nie jest zdefiniowany, jest traktowany jako komunikat (rozwiązujący żądania, gdy zasada jest połączona z przepływem żądania, lub w odpowiedzi, gdy zasada jest dołączona w procesie odpowiedzi).

Jeśli zmiennej źródłowej nie można rozpoznać lub przechodzi się do typu innego niż wiadomość, zasada powoduje zgłoszenie błędu.

<Source>response</Source>
Domyślnie żądania lub odpowiedzi zależnie od tego, gdzie zasada została dodana do przepływu serwera proxy interfejsu API;
Obecność Opcjonalnie
Typ wiadomość

&lt;OutputVariable&gt; element

Przechowuje dane wyjściowe konwersji w formacie XML na format JSON. Jest to zwykle ta sama wartość co parametr czyli zwykle odpowiedź XML jest konwertowana na odpowiedź JSON.

Ładunek komunikatu XML jest analizowany i konwertowany na format JSON, a tag HTTP Content-type nagłówek wiadomości w formacie XML jest ustawiony na application/json.

Jeśli nie określisz wartości OutputVariable, source będzie traktowana jako OutputVariable Jeśli np. source to response, to OutputVariable przyjmuje domyślną wartość response.

<OutputVariable>response</OutputVariable>
Domyślnie żądania lub odpowiedzi zależnie od tego, gdzie zasada została dodana do przepływu serwera proxy interfejsu API;
Obecność Ten element jest wymagany, gdy zmienna zdefiniowana w elemencie <Source> jest typu „ciąg znaków”.
Typ wiadomość

&lt;Options&gt;

Opcje dają Ci kontrolę nad konwersją z XML na JSON. Użyj <Options>, która umożliwia dodawanie określonych ustawień konwersji, lub <Format>, który pozwala odwołać się do szablonu wstępnie zdefiniowanych opcji. Nie możesz używać jednocześnie <Options> i <Format>

Jeśli pole <Format> nie jest używane, pole <Options> jest wymagane.

&lt;Options&gt;/&lt;RecognizeNumber&gt; element

Jeśli ma wartość true (prawda), pola liczbowe w ładunku XML zachowują swój pierwotny format.

<RecognizeNumber>true</RecognizeNumber>

Przyjrzyjmy się temu przykładowi kodu XML:

<a>
  <b>100</b>
  <c>value</c>
</a>

Jeśli true, jest konwertowany na:

{
    "a": {
        "b": 100,
        "c": "value"
    }
}

Jeśli false, jest konwertowany na:

{
    "a": {
        "b": "100",
        "c": "value"
    }
}
Domyślnie fałsz
Obecność Opcjonalnie
Typ Wartość logiczna

&lt;Options&gt;/&lt;RecognizeBoolean&gt; element

Umożliwia konwersji zachowanie wartości logicznych prawda/fałsz, zamiast przekształcania wartości ciągi tekstowe.

<RecognizeBoolean>true</RecognizeBoolean>

Dla tego przykładowego kodu XML:

<a>
  <b>true</b>
  <c>value</c>
</a>

Jeśli true, jest konwertowany na:

{
    "a": {
        "b": true,
        "c": "value"
    }
}

Jeśli false, jest konwertowany na:

{
    "a": {
        "b": "true",
        "c": "value"
    }
}
Domyślnie fałsz
Obecność Opcjonalnie
Typ Wartość logiczna

&lt;Options&gt;/&lt;RecognizeNull&gt; element

Umożliwia konwertowanie pustych wartości na wartości null.

<RecognizeNull>true</RecognizeNull>

W przypadku tego kodu XML:

<a>
  <b></b>
  <c>value</c>
</a>

Jeśli true, jest konwertowany na:

{
  "a": {
    "b": null,
    "c": "value"
  }
}

Jeśli false, jest konwertowany na:

{
  "a": {
    "b": {},
    "c": "value"
  }
}
Domyślnie fałsz
Obecność Opcjonalnie
Typ Wartość logiczna

&lt;Options&gt;/&lt;NullValue&gt; element

Wskazuje wartość, do której powinny być stosowane rozpoznane wartości null w komunikacie źródłowym dokonali konwersji. Domyślną wartością jest null. Ta opcja działa tylko jeśli RecognizeNull ma wartość prawda.

<NullValue>not-present</NullValue>

Domyślnie null
Obecność Opcjonalnie
Typ Ciąg znaków

&lt;Options&gt;/&lt;NamespaceBlockName&gt;
&lt;Options&gt;/&lt;DefaultNamespaceNodeName&gt;
&lt;Options&gt;/&lt;NamespaceSeparator&gt; elementy

Używaj tych elementów razem.

<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>&</DefaultNamespaceNodeName>
<NamespaceSeparator>***</NamespaceSeparator>

Przyjrzyjmy się temu przykładowi kodu XML:

<a xmlns="http://ns.com" xmlns:ns1="http://ns1.com">
  <ns1:b>value</ns1:b>
</a>

Jeśli nie określono NamespaceSeparator, zostanie użyta poniższa struktura JSON wygenerowano:

{
    "a": {
        "b": "value"
    }
}

Jeśli elementy NamespaceBlockName, DefaultNamespaceNodeName i NamespaceSeparator są określone jako #namespaces, &, i ***, zostanie wygenerowana ta struktura JSON:

{
    "a": {
        "#namespaces": {
            "&": "http://ns.com",
            "ns1": "http://ns1.com"
        },
        "ns1***b": "value"
    }
}
Domyślnie Zobacz przykłady powyżej.
Obecność Opcjonalny
Jeśli jednak określisz właściwość <NamespaceBlockName>, musisz również podać 2 pozostałe elementy.
Typ Strings

&lt;Options&gt;/&lt;TextAlwaysAsProperty&gt;
&lt;Options&gt;/&lt;TextNodeName&gt; elementy

Używaj tych elementów razem.

Jeśli ma wartość true, zawartość elementu XML jest konwertowana na ciąg znaków. usłudze.

<TextAlwaysAsProperty>true</TextAlwaysAsProperty>
<TextNodeName>TEXT</TextNodeName>

W przypadku tego kodu XML:

<a>
  <b>value1</b>
  <c>value2<d>value3</d>value4</c>
</a>

Jeśli TextAlwaysAsProperty ma wartość true i TextNodeName w postaci TEXT, zostanie wygenerowana ta struktura JSON:

{
  "a": {
    "b": {
      "TEXT": "value1"
    },
    "c": {
      "TEXT": [
        "value2",
        "value4"
        ],
        "d": {
          "TEXT": "value3"
        }
      }
    }
}

Jeśli TextAlwaysAsProperty ma wartość false i TextNodeName została określona jako TEXT, ta struktura JSON to wygenerowano:

{
  "a": {
    "b": "value1",
    "c": {
      "TEXT": [
        "value2",
        "value4"
      ],
      {
        "d": "value3",
      }
    }
}
Domyślnie <TextAlwaysAsProperty>: fałsz
<TextNodeName>: nie dotyczy
Obecność Opcjonalnie
Typ <TextAlwaysAsProperty>: wartość logiczna
<TextNodeName>: ciąg znaków

&lt;Options&gt;/&lt;AttributeBlockName&gt;
&lt;Options&gt;/&lt;AttributePrefix&gt; elementy

Używaj tych elementów razem.

Umożliwia grupowanie wartości w blok JSON i dodawanie prefiksów do nazw atrybutów.

<AttributeBlockName>FOO_BLOCK</AttributeBlockName>
<AttributePrefix>BAR_</AttributePrefix>

Przyjrzyjmy się temu przykładowi kodu XML:

<a attrib1="value1" attrib2="value2"/>

Jeśli oba atrybuty (AttributeBlockName i AttributePrefix) są określony zgodnie z definicją w przykładowym pliku XML na JSON, zostanie wygenerowana następująca struktura JSON:

{
  "a": {
    "FOO_BLOCK": {
      "BAR_attrib1": "value1",
      "BAR_attrib2": "value2"
    }
  }
}

Jeśli określono tylko AttributeBlockName, to poniższa struktura JSON jest wygenerowano:

{
    "a": {
        "FOO_BLOCK": {
            "attrib1": "value1",
            "attrib2": "value2"
        }
    }
}

Jeśli określono tylko AttributePrefix, to poniższa struktura JSON jest wygenerowano:

{
    "a": {
        "BAR_attrib1": "value1",
        "BAR_attrib2": "value2"
    }
}

Jeśli nie podasz żadnej z tych wartości, zostanie wygenerowana ta struktura JSON:

{
    "a": {
        "attrib1": "value1",
        "attrib2": "value2"
    }
}
Domyślnie Zobacz przykłady powyżej.
Obecność Opcjonalnie
Typ Ciąg znaków

&lt;Options&gt;/&lt;OutputPrefix&gt;
&lt;Options&gt;/&lt;OutputSuffix&gt; elementy

Używaj tych elementów razem.

<OutputPrefix>PREFIX_</OutputPrefix>
<OutputSuffix>_SUFFIX</OutputSuffix>

Przyjrzyjmy się temu przykładowi kodu XML:

<a>value</a>

Jeśli określono oba atrybuty (OutputPrefix i OutputSuffix) zgodnie z definicją w przykładowym pliku XML na JSON, zostanie wygenerowana następująca struktura JSON:

PREFIX_{
    "a": "value"
}_SUFFIX

Jeśli podasz tylko OutputPrefix, generowana zostanie ta struktura JSON:

PREFIX_{
  "a" : "value"
}

Jeśli podasz tylko OutputSuffix, generowana zostanie ta struktura JSON:

{
  "a" : "value"
}_SUFFIX

Jeśli nie określono ani OutputPrefix, ani OutputSuffix, następujący Jest generowana struktura JSON:

{
    "a": "value"
}
Domyślnie Zobacz przykłady powyżej.
Obecność Opcjonalnie
Typ Ciąg znaków

&lt;Options&gt;/&lt;StripLevels&gt; element

<Options>
    <StripLevels>4</StripLevels>
</Options>

Czasami ładunki XML, takie jak SOAP, mają wiele poziomów nadrzędnych, których nie chcesz uwzględniać przekonwertowano plik JSON. Oto przykładowa odpowiedź SOAP zawierająca wiele poziomów:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/Schemata-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
      <GetCityWeatherByZIPResponse xmlns="http://ws.cdyne.com/WeatherWS/">
          <GetCityWeatherByZIPResult>
              <State>CO</State>
              <City>Denver</City>
              <Description>Sunny</Description>
              <Temperature>62</Temperature>
          </GetCityWeatherByZIPResult>
      </GetCityWeatherByZIPResponse>
  </soap:Body>
</soap:Envelope>

Zanim dojdziesz do poziomu stanu, miasta, opisu i temperatury, musisz przejść 4 poziomy. Bez użycia funkcji <StripLevels> przekonwertowana odpowiedź JSON będzie wyglądać tak: to:

{
   "Envelope" : {
      "Body" : {
         "GetCityWeatherByZIPResponse" : {
            "GetCityWeatherByZIPResult" : {
               "State" : "CO",
               "City" : "Denver",
               "Description" : "Sunny",
               "Temperature" : "62"
            }
         }
      }
   }
}

Aby usunąć te pierwsze 4 poziomy w odpowiedzi JSON, ustaw <StripLevels>4</StripLevels>, dzięki czemu zyskasz: Plik JSON:

{
  "State" : "CO",
  "City" : "Denver",
  "Description" : "Sunny",
  "Temperature" : "62"
}

Możesz usuwać poziomy aż do pierwszego elementu zawierającego wiele elementów podrzędnych. Zastosowanie to znaczy? Spójrzmy na bardziej złożony przykład kodu JSON:

{
   "Envelope" : {
      "Body" : {
         "GetCityForecastByZIPResponse" : {
            "GetCityForecastByZIPResult" : {
               "ResponseText" : "City Found",
               "ForecastResult" : {
                  "Forecast" : [
                     {
                        "ProbabilityOfPrecipiation" : {
                           "Nighttime" : "00",
                           "Daytime" : 10
                        }  ...

Poziom 3 w tym przykładzie to GetCityForecastByZIPResponse, który ma tylko jeden dziecka. Jeśli więc chcesz użyć <StripLevels>3</StripLevels> (usuń pierwszych 3 poziomach), kod JSON będzie wyglądał tak:

{
   "GetCityForecastByZIPResult" : {
      "ResponseText" : "City Found",
      "ForecastResult" : {
         "Forecast" : [
            {
               "ProbabilityOfPrecipiation" : {
                  "Nighttime" : "00",
                  "Daytime" : 10
               }  ...

Zwróć uwagę, że GetCityForecastByZIPResult ma kilka elementów podrzędnych. Jest to pierwszego elementu zawierającego wiele elementów podrzędnych, możesz usunąć ten ostatni poziom za pomocą funkcji <StripLevels>4</StripLevels>, dzięki którym uzyskasz te korzyści: Plik JSON:

{
   "ResponseText" : "City Found",
   "ForecastResult" : {
      "Forecast" : [
         {
            "ProbabilityOfPrecipiation" : {
               "Nighttime" : "00",
               "Daytime" : 10
            }  ...

Poziom 4 to pierwszy poziom zawierający wiele dzieci, więc nie możesz usunąć żadnych poziomów jest niższa niż ta wartość. Jeśli ustawisz poziom paska na 5, 6, 7 itd., nadal będziesz widzieć odpowiedź powyżej.

Domyślnie 0 (brak usuwania poziomu)
Obecność Opcjonalnie
Typ Liczba całkowita

&lt;Options&gt;/&lt;TreatAsArray&gt;/&lt;Path&gt; element

<Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>

Ta kombinacja elementów zapewnia, że wartości z dokumentu XML są umieszczane w pliku JSON . Jest to przydatne np. wtedy, gdy liczba elementów podrzędnych może się różnić (od 1 do wielu) i chcesz się upewnić, że wartości są zawsze w tablicy. Dzięki temu Twoje dane kod jest stabilny, ponieważ za każdym razem dane z tablicy można pobierać w ten sam sposób. Dla: przykład: $.teachers.teacher.studentnames[0] pobiera wartość pierwszego imienia ucznia niezależnie od liczby wartości w tablicy.

Cofnijmy się i spójrzmy na domyślne zachowanie XML na JSON, a potem zobaczmy, jak steruj wyjściem za pomocą <TreatAsArray>/<Path>.

Gdy dokument XML zawiera element z wieloma wartościami podrzędnymi (zwykle na podstawie schematu gdzie maxOccurs='unbounded' elementu), zasada XML na JSON automatycznie umieszcza te wartości w tablicy. Na przykład następujący blok XML:

<teacher>
    <name>teacherA</name>
    <studentnames>
        <name>student1</name>
        <name>student2</name>
    </studentnames>
</teacher>

...jest automatycznie konwertowany na następujący kod JSON bez specjalnej zasady Konfiguracja:

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : [
                 "student1",
                 "student2"
              ]}
           }
      }
}

Zwróć uwagę, że 2 nazwiska uczniów są umieszczone w tablicy.

Jeśli jednak w dokumencie XML jest tylko jeden uczeń, zasada XML na JSON automatycznie traktuje wartość jako pojedynczy ciąg, a nie tablicę ciągów, jak to widać w poniższym przykładzie przykład:

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : "student1"
              }
          }
      }
}

W poprzednich przykładach podobne dane zostały skonwertowane w inny sposób: raz jako tablica, drugi jako pojedynczy ciąg znaków. Element <TreatAsArray>/<Path> pozwala kontrolujesz wyjście. Możesz na przykład określić, że imiona i nazwiska uczniów są zawsze wpisywane tablica, nawet jeśli istnieje tylko jedna wartość. Aby to zrobić, określ ścieżkę do , którego wartości chcesz umieścić w tablicy, np.:

<Options>
    <TreatAsArray>
        <Path>teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>

Powyższa konfiguracja zapisze kod JSON w taki sposób:

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : ["student1"]
              }
            ]
          }
      }
}

Zwróć uwagę, że uczeń1 jest teraz w tablicy. Niezależnie od tego, czy jest uczniów, możesz pobrać je z tablicy JSON w swoim kodzie, korzystając z tej ścieżki JSONPath: $.teachers.teacher.studentnames.name[0]

Element <Path> ma też atrybut unwrap, jak opisano w przejdź do następnej sekcji.

Domyślnie Nie dotyczy
Obecność Opcjonalnie
Typ Ciąg znaków

Atrybuty

 <Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>
Atrybut Opis Obecność Typ
wyodrębnić

Wartość domyślna: fałsz.

Usuwa element z danych wyjściowych JSON. Służy do skrócenia lub rozluźnienia treści JSON, co skraca ścieżkę JSONPath niezbędną do pobierania wartości. Przykład: zamiast $.teachers.teacher.studentnames.name[*], możesz wypłaszczyć JSON i $.teachers.studentnames[*].

Oto przykładowy kod JSON:

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : [
                 "student1",
                 "student2"
              ]}...

W tym przykładzie można argumentować, że elementy teacher i parametry Element name studentnames jest zbędny. Możesz więc usunąć lub odpakować element . Oto jak skonfigurować element <Path>:

<TreatAsArray>
    <Path unwrap="true">teachers/teacher</Path>
    <Path unwrap="true">teachers/teacher/studentnames/name</Path>
</TreatAsArray>

Atrybut unwrap ma wartość prawda, a ścieżki do elementów i wyodrębnianie. Dane wyjściowe JSON będą teraz wyglądać tak:

{
  "teachers" : [{
      "name" : "teacherA",
      "studentnames" : ["student1","student2"]
      }]...

Pamiętaj, że ponieważ element <Path> znajduje się w sekcji <TreatAsArray>, oba elementy na ścieżce będą traktowanych jako tablice w danych wyjściowych JSON.

Opcjonalnie Wartość logiczna

Więcej przykładów i przewodnik po funkcjach znajdziesz w tym artykule społeczności Apigee: https://community.apigee.com/content/kbentry/33374/new-edge-minifeature-the-treatasarray-option-in-th.html.

&lt;Format&gt;

Format daje Ci kontrolę nad konwersją z XML na JSON. Wpisz nazwę wstępnie zdefiniowanego elementu który zawiera określoną kombinację elementów opcji opisanych w tym temacie. Wstępnie zdefiniowane formaty to: xml.com, yahoo, google, badgerFish

Użyj elementu <Format> lub grupy <Options>. Nie możesz użyć <Format> i <Options>.

Poniżej znajdziesz definicje formatu każdego wstępnie zdefiniowanego szablonu.

xml.com

<RecognizeNull>true</RecognizeNull>
<TextNodeName>#text</TextNodeName>
<AttributePrefix>@</AttributePrefix>

yahoo

<RecognizeNumber>true</RecognizeNumber>
<TextNodeName>content</TextNodeName>

google

<TextNodeName>$t</TextNodeName>
<NamespaceSeparator>$</NamespaceSeparator>
<TextAlwaysAsProperty>true</TextAlwaysAsProperty>

badgerFish

<TextNodeName>$</TextNodeName>
<TextAlwaysAsProperty>true</TextAlwaysAsProperty>
<AttributePrefix>@</AttributePrefix>
<NamespaceSeparator>:</NamespaceSeparator>
<NamespaceBlockName>@xmlns</NamespaceBlockName>
<DefaultNamespaceNodeName>$</DefaultNamespaceNodeName>

Składnia elementu:

<Format>yahoo</Format>
Domyślnie Wpisz nazwę dostępnego formatu:
xml.com, yahoo, google, badgerFish
Obecność Wymagany, jeśli <Options> nie jest używany.
Typ Ciąg znaków

Schematy


Informacje o błędzie

W tej sekcji opisano kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wyzwala błąd. Warto o tym wiedzieć, jeśli rozwijasz reguły błędów, aby obsługi błędów. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami i postępowaniu z błędami

Błędy w czasie wykonywania

Te błędy mogą wystąpić podczas wykonywania zasady.

Kod błędu Stan HTTP Przyczyna Napraw
steps.xmltojson.ExecutionFailed 500 Ten błąd występuje, gdy ładunek wejściowy (XML) jest pusty, wejściowy plik XML jest nieprawidłowy lub błędnie sformatowany.
steps.xmltojson.InCompatibleType 500 Ten błąd występuje, jeśli typ zmiennej zdefiniowanej w elemencie <Source> i parametrze Elementy <OutputVariable> nie są takie same. Musisz koniecznie dodać typ zmiennych zawartego w elemencie <Source> i elementu <OutputVariable>.
steps.xmltojson.InvalidSourceType 500 Ten błąd występuje, jeśli typ zmiennej używanej do zdefiniowania elementu <Source> to nieprawidłowa.Prawidłowe typy zmiennych to komunikat i ciąg znaków.
steps.xmltojson.OutputVariableIsNotAvailable 500 Ten błąd występuje, jeśli zmienna określona w elemencie <Source> kodu XML Zasada JSON jest typu „ciąg znaków”, a element <OutputVariable> nie został zdefiniowany. Element <OutputVariable> jest wymagany, gdy zmienna zdefiniowana w parametrze <Source> element jest typu „ciąg znaków”.
steps.xmltojson.SourceUnavailable 500 Ten błąd występuje, jeśli komunikat określona w elemencie <Source> zasady XML na JSON to:
    .
  • poza zakresem (niedostępne w ramach konkretnego procesu, w którym są realizowane zasady) lub
  • nie można rozwiązać (nie jest zdefiniowany)

Błędy wdrażania

Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego tę zasadę.

Nazwa błędu Przyczyna Napraw
EitherOptionOrFormat Jeśli jeden z elementów <Options> lub <Format> nie jest wartością zadeklarowane w zasadzie XML na JSON, nie uda się wdrożyć serwera proxy interfejsu API.
UnknownFormat Jeśli element <Format> w zasadzie XML na JSON zawiera nieznaną wartość formatu, wdrożenie serwera proxy interfejsu API się nie uda. Wstępnie zdefiniowane formaty obejmują: xml.com, yahoo, google i badgerFish.

Zmienne błędów

Te zmienne są ustawiane po wystąpieniu błędu działania. Więcej informacji znajdziesz w artykule Podstawowe informacje o błędach związanych z naruszeniem zasad.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu podana w tabeli Błędy czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. fault.name = "SourceUnavailable"
xmltojson.policy_name.failed policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. xmltojson.XMLtoJSON-1.failed = true

Przykładowa odpowiedź na błąd

{
  "fault": {
    "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available",
    "detail": {
      "errorcode": "steps.xml2json.SourceUnavailable"
    }
  }
}

Przykładowa reguła błędu

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="XML to JSON Faults">
    <Step>
        <Name>AM-SourceUnavailableMessage</Name>
        <Condition>(fault.name Matches "SourceUnavailable") </Condition>
    </Step>
    <Step>
        <Name>AM-BadXML</Name>
        <Condition>(fault.name = "ExecutionFailed")</Condition>
    </Step>
    <Condition>(xmltojson.XMLtoJSON-1.failed = true) </Condition>
</FaultRule>

Powiązane artykuły

Z JSON na XML: z JSON na XML