Zasada XMLtoJSON

Wyświetlasz dokumentację Apigee Edge.
Zapoznaj się z dokumentacją Apigee X. info

Co

Ta zasada konwertuje wiadomości z formatu XML na format JSON, co daje kilka opcji kontrolowania sposobu konwersji wiadomości.

Zakładając, że celem jest przekształcenie odpowiedzi w formacie XML na odpowiedź w formacie JSON, zasada zostanie dołączona do przepływu odpowiedzi (np. Odpowiedź / ProxyEndpoint / PostFlow).

Informacje

W typowym scenariuszu mediacji zasady JSON do XML w przepływie żądań przychodzących są często łączone z zasadami XML do JSON w przepływie odpowiedzi wychodzących. Dzięki połączeniu zasad w ten sposób można udostępnić interfejs API JSON dla usług backendu, które natywnie obsługują tylko format XML.

W scenariuszach, w których interfejsy API są używane przez różne aplikacje klienckie, które mogą wymagać formatu JSON lub XML, format odpowiedzi można ustawiać dynamicznie, konfigurując zasady konwersji z JSON na XML i z XML na JSON, aby były wykonywane warunkowo. Przykład wdrożenia tego scenariusza znajdziesz w sekcji Zmienne i warunki przepływu.


Przykłady

Szczegółowe omówienie konwersji między formatami JSON i XML znajdziesz w artykule Converting between XML and JSON with Apigee: What you need to know (Konwersja między formatami XML i JSON w Apigee: co musisz wiedzieć).

Konwertowanie odpowiedzi

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

Ta konfiguracja, która jest minimalną konfiguracją wymaganą do przekonwertowania XML na JSON, przyjmuje jako źródło wiadomość odpowiedzi w formacie XML, a następnie tworzy wiadomość w formacie JSON, która jest wypełniana w response OutputVariable. Edge automatycznie używa zawartości tej zmiennej jako wiadomości w następnym kroku przetwarzania.


Odwołanie do elementu

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

<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>

Atrybuty <XMLtoJSON>

<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

Element <Source>

Zmienna, żądanie lub odpowiedź zawierające wiadomość XML, którą chcesz przekonwertować na JSON.

Nagłówek Content-type HTTP wiadomości źródłowej musi mieć wartość application/xml, w przeciwnym razie zasada nie jest egzekwowana.

Jeśli parametr <Source> nie jest zdefiniowany, jest traktowany jako wiadomość (co w przypadku dołączenia zasady do przepływu żądania jest interpretowane jako żądanie, a w przypadku dołączenia zasady do przepływu odpowiedzi – jako odpowiedź).

Jeśli zmiennej źródłowej nie można rozpoznać lub ma ona typ inny niż typ wiadomości, zasada zgłasza błąd.

<Source>response</Source>
Domyślna żądanie lub odpowiedź, w zależności od tego, gdzie zasada jest dodana do przepływu proxy interfejsu API.
Obecność Opcjonalny
Typ wiadomość

Element <OutputVariable>

Przechowuje dane wyjściowe konwersji z formatu XML na JSON. Zwykle jest to ta sama wartość co źródło, czyli zwykle odpowiedź XML jest konwertowana na odpowiedź JSON.

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

Jeśli nie określono właściwości OutputVariable, wartość source jest traktowana jako OutputVariable. Jeśli na przykład wartość source to response, domyślna wartość OutputVariable to response.

<OutputVariable>response</OutputVariable>
Domyślna żądanie lub odpowiedź, w zależności od tego, gdzie zasada jest dodana do przepływu proxy interfejsu API.
Obecność Ten element jest wymagany, gdy zmienna zdefiniowana w elemencie <Source> jest typu ciąg znaków.
Typ wiadomość

<Opcje>

Opcje umożliwiają kontrolowanie konwersji z XML na JSON. Użyj grupy <Options>, która umożliwia dodawanie konkretnych ustawień konwersji, lub elementu <Format>, który umożliwia odwoływanie się do szablonu wstępnie zdefiniowanych opcji. Nie możesz używać jednocześnie <Options><Format>.

Właściwość <Options> jest wymagana, jeśli nie używasz właściwości <Format>.

Element <Options>/<RecognizeNumber>

Jeśli wartość to „true”, pola liczbowe w ładunku XML zachowują oryginalny format.

<RecognizeNumber>true</RecognizeNumber>

Przyjrzyj się temu przykładowi XML:

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

Jeśli true, konwertuje na:

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

Jeśli false, konwertuje na:

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

Element <Options>/<RecognizeBoolean>

Umożliwia zachowanie wartości logicznych true/false w konwersji zamiast przekształcania ich w ciągi znaków.

<RecognizeBoolean>true</RecognizeBoolean>

W przypadku tego przykładu XML:

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

Jeśli true, konwertuje na:

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

Jeśli false, konwertuje na:

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

Element <Options>/<RecognizeNull>

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, konwertuje na:

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

Jeśli false, konwertuje na:

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

Element <Options>/<NullValue>

Wskazuje wartość, na którą należy przekonwertować rozpoznane wartości null w wiadomości źródłowej. Domyślna wartość to null. Ta opcja działa tylko wtedy, gdy RecognizeNull ma wartość Prawda.

<NullValue>not-present</NullValue>

Domyślna null
Obecność Opcjonalny
Typ Ciąg znaków

Elementy <Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator>

Używaj tych elementów razem.

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

Przyjrzyj się temu przykładowi XML:

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

Jeśli nie podasz wartości NamespaceSeparator, zostanie wygenerowana ta struktura JSON:

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

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

{
    "a": {
        "#namespaces": {
            "&": "http://ns.com",
            "ns1": "http://ns1.com"
        },
        "ns1***b": "value"
    }
}
Domyślna Przykłady znajdziesz powyżej.
Obecność Opcjonalny
Jeśli jednak określisz <NamespaceBlockName>, musisz też podać pozostałe 2 elementy.
Typ Strings

Elementy <Options>/<TextAlwaysAsProperty>
<Options>/<TextNodeName>

Używaj tych elementów razem.

Jeśli ustawisz wartość true, zawartość elementu XML zostanie przekonwertowana na właściwość ciągu znaków.

<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 parametr TextAlwaysAsProperty ma wartość true, a parametr TextNodeName ma wartość TEXT, generowana jest ta struktura JSON:

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

Jeśli wartość TextAlwaysAsProperty to false, a wartość TextNodeName to TEXT, generowana jest ta struktura JSON:

{
  "a": {
    "b": "value1",
    "c": {
      "TEXT": [
        "value2",
        "value4"
      ],
      {
        "d": "value3",
      }
    }
}
Domyślna <TextAlwaysAsProperty>: false
<TextNodeName>: N/A
Obecność Opcjonalny
Typ <TextAlwaysAsProperty>: Wartość logiczna
<TextNodeName>: Ciąg

Elementy <Options>/<AttributeBlockName>
<Options>/<AttributePrefix>

Używaj tych elementów razem.

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

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

Przyjrzyj się temu przykładowi XML:

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

Jeśli oba atrybuty (AttributeBlockName i AttributePrefix) są określone zgodnie z przykładem XML do JSON, generowana jest ta struktura JSON:

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

Jeśli określono tylko AttributeBlockName, generowana jest ta struktura JSON:

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

Jeśli określono tylko AttributePrefix, generowana jest ta struktura JSON:

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

Jeśli nie określono żadnej z tych wartości, generowana jest ta struktura JSON:

{
    "a": {
        "attrib1": "value1",
        "attrib2": "value2"
    }
}
Domyślna Przykłady znajdziesz powyżej.
Obecność Opcjonalny
Typ Ciąg znaków

Elementy <Options>/<OutputPrefix>
<Options>/<OutputSuffix>

Używaj tych elementów razem.

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

Przyjrzyj się temu przykładowi XML:

<a>value</a>

Jeśli oba atrybuty (OutputPrefix i OutputSuffix) są określone zgodnie z przykładem XML do JSON, generowana jest ta struktura JSON:

PREFIX_{
    "a": "value"
}_SUFFIX

Jeśli podano tylko OutputPrefix, generowana jest ta struktura JSON:

PREFIX_{
  "a" : "value"
}

Jeśli podano tylko OutputSuffix, generowana jest ta struktura JSON:

{
  "a" : "value"
}_SUFFIX

Jeśli nie określono ani OutputPrefix, ani OutputSuffix, generowana jest ta struktura JSON:

{
    "a": "value"
}
Domyślna Przykłady znajdziesz powyżej.
Obecność Opcjonalny
Typ Ciąg znaków

Element <Options>/<StripLevels>

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

Czasami ładunki XML, takie jak SOAP, mają wiele poziomów nadrzędnych, których nie chcesz uwzględniać w przekonwertowanym pliku 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 przejdziesz do poziomu stanu, miasta, opisu i temperatury, musisz przejść 4 poziomy. Bez użycia <StripLevels> przekonwertowana odpowiedź JSON wyglądałaby tak:

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

Jeśli chcesz usunąć pierwsze 4 poziomy w odpowiedzi JSON, ustaw wartość <StripLevels>4</StripLevels>. Otrzymasz wtedy ten kod JSON:

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

Możesz usunąć poziomy aż do pierwszego elementu, który zawiera wiele elementów podrzędnych. Co to oznacza? Przyjrzyjmy się bardziej złożonemu przykładowi 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 1 element podrzędny. Jeśli użyjesz <StripLevels>3</StripLevels> (usuniesz pierwsze 3 poziomy), kod JSON będzie wyglądać tak:

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

Zwróć uwagę, że element GetCityForecastByZIPResult ma wiele elementów podrzędnych. Ponieważ jest to pierwszy element zawierający wiele elementów podrzędnych, możesz usunąć ten ostatni poziom za pomocą funkcji <StripLevels>4</StripLevels>, która zwróci następujący kod JSON:

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

Poziom 4 jest pierwszym poziomem zawierającym wiele elementów podrzędnych, więc nie można usunąć żadnych poziomów niższych od niego. Jeśli ustawisz poziom usuwania na 5, 6, 7 itd., nadal będziesz otrzymywać powyższą odpowiedź.

Domyślna 0 (brak usuwania poziomów)
Obecność Opcjonalny
Typ Liczba całkowita

Element <Options>/<TreatAsArray>/<Path>

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

Ta kombinacja elementów pozwala mieć pewność, że wartości z dokumentu XML zostaną umieszczone w tablicy JSON. Jest to przydatne np. wtedy, gdy liczba elementów podrzędnych może się różnić (od jednego do wielu) i chcesz mieć pewność, że wartości są zawsze w tablicy. Dzięki temu kod jest stabilny, ponieważ dane z tablicy możesz pobierać zawsze w ten sam sposób. Na przykład: $.teachers.teacher.studentnames[0] pobiera pierwszą wartość imienia ucznia w tablicy niezależnie od liczby wartości w tablicy.

Cofnijmy się i przyjrzyjmy domyślnemu działaniu konwersji XML na JSON, a potem zobaczmy, jak kontrolować dane wyjściowe za pomocą <TreatAsArray>/<Path>.

Gdy dokument XML zawiera element z wieloma wartościami podrzędnymi (zwykle na podstawie schematu, w którym element ma maxOccurs='unbounded'), zasada XML do JSON automatycznie umieszcza te wartości w tablicy. Na przykład ten blok XML

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

...zostanie automatycznie przekonwertowany na poniższy kod JSON bez specjalnej konfiguracji zasad:

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

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

Jeśli jednak w dokumencie XML występuje tylko jeden uczeń, zasada XML do JSON automatycznie traktuje wartość jako pojedynczy ciąg znaków, a nie tablicę ciągów znaków, jak pokazano w tym przykładzie:

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

W poprzednich przykładach podobne dane były konwertowane w różny sposób – raz jako tablica, a raz jako pojedynczy ciąg znaków. W tym miejscu element <TreatAsArray>/<Path> umożliwia kontrolowanie danych wyjściowych. Możesz na przykład zadbać o to, aby imiona uczniów były zawsze umieszczane w tablicy, nawet jeśli jest tylko jedna wartość. Aby to skonfigurować, wskaż ścieżkę do elementu, którego wartości chcesz umieścić w tablicy, w ten sposób:

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

Powyższa konfiguracja spowoduje zapisanie pliku JSON w ten sposób:

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

Zwróć uwagę, że student1 jest teraz w tablicy. Teraz, niezależnie od tego, czy jest jeden uczeń, czy wielu, możesz pobrać ich z tablicy JSON w kodzie za pomocą tego wyrażenia JSONPath:$.teachers.teacher.studentnames.name[0]

Element <Path> ma też atrybut unwrap, który został opisany w następnej sekcji.

Domyślna Nie dotyczy
Obecność Opcjonalny
Typ Ciąg znaków

Atrybuty

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

Domyślnie: false

Usuwa element z danych wyjściowych JSON. Użyj tej opcji, aby uprościć lub spłaszczyć (rozwinąć) plik JSON, co skróci też ścieżkę JSONPath potrzebną do pobrania wartości. Na przykład zamiast $.teachers.teacher.studentnames.name[*] możesz spłaszczyć JSON i użyć $.teachers.studentnames[*].

Oto przykład w formacie JSON:

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

W tym przykładzie można argumentować, że element teacher i element studentnames name są zbędne. Możesz je usunąć lub rozpakować. Aby to zrobić, skonfiguruj element <Path> w ten sposób:

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

Atrybut unwrap ma wartość „true” i podano ścieżki do elementów, które mają zostać rozwinięte. Dane wyjściowe w formacie JSON będą teraz wyglądać tak:

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

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

Opcjonalny Wartość logiczna

Więcej przykładów i szczegółowe informacje o tej funkcji znajdziesz w tym artykule na forum Apigee: Community tutorial: The TreatAsArray option in the XML to JSON policy (Samouczek społeczności: opcja TreatAsArray w zasadach XML do JSON).

<Format>

Format umożliwia kontrolowanie konwersji z XML na JSON. Wpisz nazwę wstępnie zdefiniowanego szablonu, który zawiera konkretną 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żywać jednocześnie <Format><Options>.

Poniżej znajdziesz definicje formatów każdego predefiniowanego 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ślna Wpisz nazwę dostępnego formatu:
xml.com, yahoo, google, badgerFish
Obecność Wymagany, jeśli nie jest używana właściwość <Options>.
Typ Ciąg znaków

Schematy


Odniesienie do błędu

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

JSON do XML: zasady JSON do XML