Zasada XMLtoJSON

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Co

Ta zasada konwertuje wiadomości z formatu Extensible Markup Language (XML) na format JavaScript Object Notation (JSON), który daje Ci kilka opcji kontrolowania sposobu konwertowania wiadomości.

Zakładając, że intencją jest przekonwertowanie odpowiedzi w formacie XML na odpowiedź w formacie JSON, zasada zostanie dołączona do przepływu odpowiedzi (na przykład Response / ProxyEndpoint / PostFlow).

Informacje

W typowym scenariuszu zapośredniczenia zasady JSON-XML dotyczące przepływu żądań przychodzących są często łączone z zasadą XML do JSON w przepływie odpowiedzi wychodzących. Łącząc zasady w ten sposób, można ujawnić interfejs JSON API dla usług backendu, które natywnie obsługują tylko kod XML.

W sytuacjach, 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 ustawić dynamicznie, konfigurując zasady JSON jako XML i XML na JSON na ich wykonywanie. Implementację tego scenariusza znajdziesz w sekcji Zmienne i warunki przepływu.


Sample

Szczegółowe omówienie konwertowania między formatami 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 konwersji kodu XML na JSON – przyjmuje jako źródło wiadomość z odpowiedzią w formacie XML, a następnie tworzy wiadomość w formacie JSON wypełnianą zmienną wyjściową response. Edge 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>

Atrybuty <XMLtoJSON>

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

Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślne 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>, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw wartość false, aby zwracać błąd w przypadku niepowodzenia zasady. Jest to normalne działanie większości zasad.

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

false Opcjonalnie
enabled

Ustaw jako true, aby wymuszać zasadę.

Ustaw wartość false, aby wyłączyć tę zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie dołączona do procesu.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

false Wycofano

Element <DisplayName>

Użyj oprócz atrybutu name, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

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

Nie dotyczy

Jeśli pominiesz ten element, zostanie użyta wartość atrybutu name zasady.

Obecność Opcjonalnie
Typ Ciąg znaków

Element <Source>

Zmienna, żądanie lub odpowiedź zawierające komunikat w formacie XML, który chcesz przekonwertować na format JSON.

Nagłówek HTTP Content-type wiadomości źródłowej musi być ustawiony na application/xml. W przeciwnym razie zasada nie będzie egzekwowana.

Jeśli zasada <Source> nie jest zdefiniowana, jest traktowana jako wiadomość (która przechodzi do żądania, gdy zasada jest dołączona do przepływu żądań lub jako odpowiedź, gdy zasada jest dołączona do procesu odpowiedzi).

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

<Source>response</Source>
Domyślnie żądanie lub odpowiedź, zależnie od tego, gdzie zasada zostanie dodana do procesu serwera proxy interfejsu API
Obecność Opcjonalnie
Typ wiadomość

Element <outputVariable>

Przechowuje dane wyjściowe konwersji w formacie XML na format JSON. Zwykle jest to wartość taka sama jak wartość źródłowa, 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 ustawiony na application/json.

Jeśli OutputVariable nie jest określony, source jest traktowany jako OutputVariable. Jeśli np. source to response, OutputVariable przyjmuje wartość domyślną response.

<OutputVariable>response</OutputVariable>
Domyślnie żądanie lub odpowiedź, zależnie od tego, gdzie zasada zostanie dodana do procesu serwera proxy interfejsu API
Obecność Ten element jest wymagany, gdy zmienna zdefiniowana w elemencie <Source> jest ciągiem znaków.
Typ wiadomość

<Opcje>

Opcje zapewniają kontrolę nad konwersją z XML na JSON. Użyj grupy <Options>, która pozwala dodać określone ustawienia konwersji, albo elementu <Format>, który umożliwia odwoływanie się do szablonu wstępnie zdefiniowanych opcji. Nie możesz używać jednocześnie właściwości <Options> i <Format>.

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

Element <Options>/<RecognizeNumber>

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

<RecognizeNumber>true</RecognizeNumber>

Przyjrzyj się temu przykładowi XML:

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

Jeśli true zmieni się na:

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

Jeśli false zmieni się na:

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

Element <Options>/<RecognizeBoolean>

Pozwala na zachowanie przez konwersję wartości logicznych prawda i fałsz, 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 zmieni się na:

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

Jeśli false zmieni się na:

{
    "a": {
        "b": "true",
        "c": "value"
    }
}
Domyślnie false
Obecność Opcjonalnie
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 zmieni się na:

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

Jeśli false zmieni się na:

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

Element <Options>/<NullValue>

Wskazuje wartość, na którą należy przekonwertować rozpoznawane wartości null z wiadomości źródłowej. Wartość domyślna to null. Ta opcja jest stosowana tylko wtedy, gdy RecognizeNull ma wartość prawda.

<NullValue>not-present</NullValue>

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

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

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 NamespaceSeparator nie zostanie określony, generowana jest 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ślnie Zobacz przykłady powyżej.
Obecność Opcjonalny
Jeśli jednak określisz element <NamespaceBlockName>, musisz też podać 2 pozostałe elementy.
Typ Ciąg znaków

<Options>/<TextzawszeAsProperty>
Elementy <Options>/<TextNodeName>

Używaj tych elementów razem.

Jeśli ma wartość true, zawartość elementu XML jest konwertowana na właściwość ciągu.

<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, a TextNodeName jest określony jako TEXT, generowana jest ta struktura JSON:

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

Jeśli TextAlwaysAsProperty ma wartość false, a TextNodeName jest określony jako TEXT, generowana jest ta struktura JSON:

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

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

Używaj tych elementów razem.

Umożliwia grupowanie wartości w bloku JSON i dołączanie 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 definicją w przykładowym pliku XML na JSON, zostanie wygenerowana ta struktura JSON:

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

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

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

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

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

Jeśli nie podasz żadnej z nich, zostanie wygenerowana taka struktura JSON:

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

<Opcje>/<outputPrefix>
Elementy <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 definicją w przykładowym pliku XML na JSON, zostanie wygenerowana ta struktura JSON:

PREFIX_{
    "a": "value"
}_SUFFIX

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

PREFIX_{
  "a" : "value"
}

Jeśli określono 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ślnie Przykłady znajdziesz powyżej.
Obecność Opcjonalnie
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. 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>

Do poziomu stanu, miasta, opisu i temperatury musisz przejść 4 poziomy. Bez użycia <StripLevels> przekonwertowana odpowiedź JSON wyglądałby tak:

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

Jeśli chcesz usunąć te pierwsze 4 poziomy odpowiedzi JSON, ustaw <StripLevels>4</StripLevels>, co da ten kod JSON:

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

Poziomy możesz usuwać 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. Ma tylko 1 element podrzędny. Jeśli więc 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
               }  ...

Zauważ, ż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ą właściwości <StripLevels>4</StripLevels>, co da Ci taki kod JSON:

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

Poziom 4 to pierwszy poziom, na którym znajduje się wiele elementów podrzędnych, więc nie możesz usunąć niższych poziomów. Jeśli ustawisz poziom paska na 5, 6, 7 itd., nadal będziesz otrzymywać powyższą odpowiedź.

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

Element <Options>/<TreatAsSlate>/<Path>

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

Ta kombinacja elementów zapewnia, że wartości z dokumentu XML zostaną umieszczone w tablicy JSON. Jest to przydatne, gdy na przykład liczba elementów podrzędnych może się zmieniać (od 1 do kilku) i chcesz mieć pewność, że wartości zawsze znajdują się w tablicy. Pomaga to zachować stabilność kodu, ponieważ za każdym razem dane z tablicy możesz pobierać w ten sam sposób. Na przykład: $.teachers.teacher.studentnames[0] pobiera pierwszą wartość imienia i nazwiska ucznia w tablicy niezależnie od liczby wartości w tablicy.

Przyjrzyjmy się domyślnemu działaniu XML na JSON, a następnie dowiedzmy się, jak kontrolować dane wyjściowe za pomocą <TreatAsArray>/<Path>.

Gdy dokument XML zawiera element z wieloma wartościami podrzędnymi (zwykle w oparciu o schemat, w którym maxOccurs='unbounded' tego elementu jest), zasada z XML na JSON automatycznie umieszcza te wartości w tablicy. Na przykład poniższy blok XML

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

...zosta automatycznie przekonwertowany na następujący kod JSON bez specjalnej konfiguracji zasad:

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

Zwróć uwagę, że 2 imiony uczniów są umieszczane w tablicy.

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

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

W poprzednich przykładach podobne dane były konwertowane w inny sposób – raz jako tablica, a inne jako pojedynczy ciąg znaków. Tutaj element <TreatAsArray>/<Path> pozwala kontrolować dane wyjściowe. Możesz na przykład zadbać o to, by imiona i nazwiska uczniów zawsze były umieszczane w tablicy, nawet jeśli istnieje tylko jedna wartość. Aby skonfigurować tę opcję, musisz określić ścieżkę do elementu, której wartości chcesz umieścić w tablicy. Na przykład:

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

Powyższa konfiguracja zapisze plik JSON w ten sposób:

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

Zwróć uwagę, że uczeń1 jest teraz w tablicy. Niezależnie od tego, czy jest jeden czy kilku uczniów, możesz ich teraz pobrać z tablicy JSON w kodzie przy użyciu tej ścieżki JSONPath: $.teachers.teacher.studentnames.name[0]

Element <Path> ma też atrybut unwrap, który został opisany w 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ębnianie

Wartość domyślna: false (fałsz)

Usuwa element z danych wyjściowych JSON. Umożliwia to uproszczenie lub spłaszczenie („wyodrębnianie”) kodu JSON, który dodatkowo skraca ścieżkę JSONPath potrzebną do pobierania wartości. Na przykład zamiast $.teachers.teacher.studentnames.name[*] możesz spłaszczyć plik JSON i użyć $.teachers.studentnames[*].

Oto przykład formatu JSON:

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

W tym przykładzie można by argumentować, że elementy teacher i nazwy uczniów name są niepotrzebne. Możesz je usunąć lub rozpakować. Aby to zrobić, należy skonfigurować element <Path>:

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

Atrybut unwrap ma wartość Prawda i podane są ścieżki do elementów do wyodrębnienia. Dane wyjściowe JSON będą teraz wyglądać tak:

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

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

Opcjonalnie Wartość logiczna

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

<Format>

Format daje Ci kontrolę nad konwersją z formacie XML na JSON. Wpisz nazwę wstępnie zdefiniowanego szablonu, 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żywać jednocześnie właściwości <Format> i <Options>.

Poniżej znajdziesz definicje formatów poszczególnych wstępnie zdefiniowanych szablonów.

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ść Wymagane, jeśli nie używasz parametru <Options>.
Typ Ciąg znaków

Schematy


Informacje o błędach

W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.

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 lub wejściowy kod 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 elemencie <OutputVariable> są różne. Typ zmiennych w elemencie <Source> i elemencie <OutputVariable> musi być taki sam.
steps.xmltojson.InvalidSourceType 500 Ten błąd występuje, jeśli typ zmiennej użytej do zdefiniowania elementu <Source> jest nieprawidłowy.Prawidłowe typy zmiennej to komunikat i ciąg znaków.
steps.xmltojson.OutputVariableIsNotAvailable 500 Ten błąd występuje, jeśli zmienna określona w elemencie <Source> zasady XML do JSON jest ciągiem znaków, a element <OutputVariable> nie jest zdefiniowany. Element <OutputVariable> jest wymagany, gdy zmienna zdefiniowana w elemencie <Source> jest ciągiem znaków.
steps.xmltojson.SourceUnavailable 500 Ten błąd występuje, jeśli zmienna message określona w elemencie <Source> zasady XML to JSON ma jedną z tych wartości:
  • poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada) lub
  • Nie można rozwiązać (nie określono)

Błędy wdrażania

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

Nazwa błędu Przyczyna Napraw
EitherOptionOrFormat Jeśli jeden z elementów <Options> lub <Format> nie jest zadeklarowany w zasadzie XML do formatu JSON, wdrożenie serwera proxy interfejsu API nie powiedzie się.
UnknownFormat Jeśli element <Format> w zasadzie XML do JSON ma zdefiniowany nieznany format, wdrożenie serwera proxy interfejsu API nie powiedzie się. Wstępnie zdefiniowane formaty to: xml.com, yahoo, google i badgerFish.

Zmienne błędów

Te zmienne są ustawiane, gdy wystąpi błąd środowiska wykonawczego. Więcej informacji znajdziesz w artykule Co musisz wiedzieć 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 środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. 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 to XML: zasady JSON do XML