XMLtoJSON politikası

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
info

Ne?

Bu politika, iletileri genişletilebilir işaretleme dili (XML) biçiminden JavaScript Object Notation (JSON) biçimine dönüştürür. Böylece, iletilerin nasıl dönüştürüleceğini kontrol etmek için çeşitli seçenekler sunar.

XML biçimli bir yanıtın JSON biçimli bir yanıta dönüştürülmek istendiği varsayıldığında politika, bir yanıt akışına (ör. Response / ProxyEndpoint / PostFlow) eklenir.

Hakkında

Tipik bir arabuluculuk senaryosunda, gelen istek akışındaki JSON'dan XML'ye politikası genellikle giden yanıt akışındaki XML'den JSON'a politikasıyla eşleştirilir. Politikaları bu şekilde birleştirerek, yalnızca XML'yi doğal olarak destekleyen arka uç hizmetleri için bir JSON API'si kullanıma sunulabilir.

API'lerin, JSON veya XML gerektirebilecek çeşitli istemci uygulamaları tarafından kullanıldığı senaryolarda, yanıt biçimi, JSON'u XML'ye ve XML'yi JSON'a dönüştürme politikaları koşullu olarak yürütülecek şekilde yapılandırılarak dinamik olarak ayarlanabilir. Bu senaryonun uygulanması için Akış değişkenleri ve koşulları bölümüne bakın.


Örnekler

JSON ile XML arasında dönüştürme hakkında ayrıntılı bilgi için Apigee ile XML ve JSON arasında dönüştürme: Bilmeniz gerekenler başlıklı makaleyi inceleyin.

Yanıt dönüştürme

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

XML'yi JSON'a dönüştürmek için gereken minimum yapılandırma olan bu yapılandırma, kaynak olarak XML biçimli bir yanıt mesajı alır ve ardından response OutputVariable'da doldurulan JSON biçimli bir mesaj oluşturur. Edge, bu değişkenin içeriğini otomatik olarak sonraki işleme adımının mesajı olarak kullanır.


Öğe referansı

Bu politikada yapılandırabileceğiniz öğeler ve özellikler aşağıda verilmiştir.

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

<XMLtoJSON> özellikleri

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

Aşağıdaki tabloda tüm politika üst öğelerinde ortak olan özellikler açıklanmaktadır:

Özellik Açıklama Varsayılan Varlık
name

Politikanın dahili adı. name özelliğinin değeri Harf, sayı, boşluk, kısa çizgi, alt çizgi ve nokta içermelidir. Bu değer, 255 karakteri aşmalıdır.

İsteğe bağlı olarak, politikayı<DisplayName> yönetim arayüzü proxy düzenleyicisinde farklı bir doğal dil adı kullanabilir.

Yok Zorunlu
continueOnError

Bir politika başarısız olduğunda hata döndürmesi için false olarak ayarlayın. Bu beklenen bir durumdur çoğu politika için geçerli olur.

Akış yürütmenin bir politikadan sonra bile devam etmesi için true olarak ayarlayın başarısız olur.

false İsteğe bağlı
enabled

Politikayı uygulamak için true olarak ayarlayın.

Politikayı devre dışı bırakmak için false değerine ayarlayın. Bu politika, bir akışa bağlı kalsa bile uygulanır.

true İsteğe bağlı
async

Bu özelliğin desteği sonlandırıldı.

false Kullanımdan kaldırıldı

&lt;DisplayName&gt; öğe

Politikayı name özelliğine ek olarak farklı bir doğal dil adına sahip yönetim arayüzü proxy düzenleyicisi.

<DisplayName>Policy Display Name</DisplayName>
Varsayılan

Yok

Bu öğeyi çıkarırsanız politikanın name özelliğinin değeri: kullanılır.

Varlık İsteğe bağlı
Tür Dize

<Source> öğesi

JSON'a dönüştürmek istediğiniz XML mesajını içeren değişken, istek veya yanıt.

Kaynak iletinin HTTP Content-type üstbilgisi application/xml olarak ayarlanmalıdır. Aksi takdirde politika uygulanmaz.

<Source> tanımlanmamışsa mesaj olarak değerlendirilir (bu, politika bir istek akışına eklendiğinde istek olarak, bir yanıt akışına eklendiğinde ise yanıt olarak çözümlenir).

Kaynak değişken çözümlenemezse veya ileti olmayan bir türde çözümlenirse politika hata verir.

<Source>response</Source>
Varsayılan Politikanın API proxy akışına eklendiği yere göre belirlenen istek veya yanıt
Varlık (Presence) İsteğe bağlı
Tür mesaj

<OutputVariable> öğesi

XML'den JSON biçimine dönüştürme işleminin çıkışını depolar. Bu değer genellikle kaynakla aynıdır. Yani genellikle XML yanıtı JSON yanıtına dönüştürülür.

XML mesajının yükü ayrıştırılıp JSON'a dönüştürülür ve XML biçimli mesajın HTTP Content-type üstbilgisi application/json olarak ayarlanır.

OutputVariable belirtilmezse source, OutputVariable olarak kabul edilir. Örneğin, source değeri response ise OutputVariable varsayılan olarak response olur.

<OutputVariable>response</OutputVariable>
Varsayılan Politikanın API proxy akışına eklendiği yere göre belirlenen istek veya yanıt
Varlık (Presence) <Source> öğesinde tanımlanan değişkenin türü dize olduğunda bu öğe zorunludur.
Tür mesaj

<Options>

Seçenekler, XML'den JSON'a dönüştürme işlemi üzerinde kontrol sahibi olmanızı sağlar. Belirli dönüşüm ayarları eklemenize olanak tanıyan <Options> grubunu veya önceden tanımlanmış seçeneklerin şablonuna başvurmanıza olanak tanıyan <Format> öğesini kullanın. Hem <Options> hem de <Format> kullanamazsınız.

<Format> kullanılmıyorsa <Options> gereklidir.

<Options>/<RecognizeNumber> öğesi

Doğruysa XML yükündeki sayı alanları orijinal biçimlerini korur.

<RecognizeNumber>true</RecognizeNumber>

Aşağıdaki XML örneğini inceleyin:

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

true ise şu değere dönüştürülür:

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

false ise şu değere dönüştürülür:

{
    "a": {
        "b": "100",
        "c": "value"
    }
}
Varsayılan yanlış
Varlık (Presence) İsteğe bağlı
Tür Boole

<Options>/<RecognizeBoolean> öğesi

Değerlerin dizelere dönüştürülmesi yerine dönüşümün Boole doğru/yanlış değerlerini korumasını sağlar.

<RecognizeBoolean>true</RecognizeBoolean>

Aşağıdaki XML örneği için:

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

true ise şu değere dönüştürülür:

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

false ise şu değere dönüştürülür:

{
    "a": {
        "b": "true",
        "c": "value"
    }
}
Varsayılan yanlış
Varlık (Presence) İsteğe bağlı
Tür Boole

<Options>/<RecognizeNull> öğesi

Boş değerleri null değerlere dönüştürmenizi sağlar.

<RecognizeNull>true</RecognizeNull>

Aşağıdaki XML için:

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

true ise şu değere dönüştürülür:

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

false ise şu değere dönüştürülür:

{
  "a": {
    "b": {},
    "c": "value"
  }
}
Varsayılan yanlış
Varlık (Presence) İsteğe bağlı
Tür Boole

<Options>/<NullValue> öğesi

Kaynak mesajdaki tanınan boş değerlerin dönüştürülmesi gereken değeri gösterir. Varsayılan olarak değer null'dır. Bu seçenek yalnızca RecognizeNull doğruysa etkilidir.

<NullValue>not-present</NullValue>

Varsayılan null
Varlık (Presence) İsteğe bağlı
Tür Dize

<Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator> öğeleri

Bu öğeleri birlikte kullanın.

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

Aşağıdaki XML örneğini inceleyin:

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

NamespaceSeparator belirtilmezse aşağıdaki JSON yapısı oluşturulur:

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

NamespaceBlockName, DefaultNamespaceNodeName ve NamespaceSeparator öğeleri sırasıyla #namespaces, & ve *** olarak belirtilirse aşağıdaki JSON yapısı oluşturulur:

{
    "a": {
        "#namespaces": {
            "&": "http://ns.com",
            "ns1": "http://ns1.com"
        },
        "ns1***b": "value"
    }
}
Varsayılan Yukarıdaki örneklere bakın.
Varlık (Presence) İsteğe bağlı
Ancak <NamespaceBlockName> değerini belirtirseniz diğer iki öğeyi de belirtmeniz gerekir.
Tür Yaylı çalgılar

<Options>/<TextAlwaysAsProperty>
<Options>/<TextNodeName> öğeleri

Bu öğeleri birlikte kullanın.

true olarak ayarlanırsa XML öğesinin içeriği dize özelliğine dönüştürülür.

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

Aşağıdaki XML için:

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

TextAlwaysAsProperty, true olarak ayarlanırsa ve TextNodeName, TEXT olarak belirtilirse aşağıdaki JSON yapısı oluşturulur:

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

TextAlwaysAsProperty, false olarak ayarlanmışsa ve TextNodeName, TEXT olarak belirtilmişse aşağıdaki JSON yapısı oluşturulur:

{
  "a": {
    "b": "value1",
    "c": {
      "TEXT": [
        "value2",
        "value4"
      ],
      {
        "d": "value3",
      }
    }
}
Varsayılan <TextAlwaysAsProperty>: false
<TextNodeName>: Yok
Varlık (Presence) İsteğe bağlı
Tür <TextAlwaysAsProperty>: Boolean
<TextNodeName>: String

<Options>/<AttributeBlockName>
<Options>/<AttributePrefix> öğeleri

Bu öğeleri birlikte kullanın.

Değerleri bir JSON bloğunda gruplandırmanıza ve özellik adlarına önekler eklemenize olanak tanır.

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

Aşağıdaki XML örneğini inceleyin:

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

Her iki özellik de (AttributeBlockName ve AttributePrefix) XML'den JSON'a dönüştürme örneğinde tanımlandığı şekilde belirtilirse aşağıdaki JSON yapısı oluşturulur:

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

Yalnızca AttributeBlockName belirtilirse aşağıdaki JSON yapısı oluşturulur:

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

Yalnızca AttributePrefix belirtilirse aşağıdaki JSON yapısı oluşturulur:

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

İkisi de belirtilmezse aşağıdaki JSON yapısı oluşturulur:

{
    "a": {
        "attrib1": "value1",
        "attrib2": "value2"
    }
}
Varsayılan Yukarıdaki örneklere bakın.
Varlık (Presence) İsteğe bağlı
Tür Dize

<Options>/<OutputPrefix>
<Options>/<OutputSuffix> öğeleri

Bu öğeleri birlikte kullanın.

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

Aşağıdaki XML örneğini inceleyin:

<a>value</a>

XML'den JSON'a örneğinde tanımlandığı gibi her iki özellik de (OutputPrefix ve OutputSuffix) belirtilirse aşağıdaki JSON yapısı oluşturulur:

PREFIX_{
    "a": "value"
}_SUFFIX

Yalnızca OutputPrefix belirtilirse aşağıdaki JSON yapısı oluşturulur:

PREFIX_{
  "a" : "value"
}

Yalnızca OutputSuffix belirtilirse aşağıdaki JSON yapısı oluşturulur:

{
  "a" : "value"
}_SUFFIX

Ne OutputPrefix ne de OutputSuffix belirtilirse aşağıdaki JSON yapısı oluşturulur:

{
    "a": "value"
}
Varsayılan Yukarıdaki örneklere bakın.
Varlık (Presence) İsteğe bağlı
Tür Dize

<Options>/<StripLevels> öğesi

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

SOAP gibi XML yüklerinde bazen dönüştürülen JSON'a dahil etmek istemediğiniz birçok üst düzey bulunur. Aşağıda, birçok düzey içeren bir SOAP yanıtı örneği verilmiştir:

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

Eyalet, Şehir, Açıklama ve Sıcaklık düzeyine ulaşmadan önce 4 düzey vardır. <StripLevels> kullanılmadığında dönüştürülen JSON yanıtı şu şekilde görünür:

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

JSON yanıtındaki ilk 4 düzeyi kaldırmak istiyorsanız <StripLevels>4</StripLevels> değerini ayarlarsınız. Bu durumda aşağıdaki JSON'ı elde edersiniz:

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

Birden fazla alt öğe içeren ilk öğeye kadar düzeyleri kaldırabilirsiniz. What does that mean? Daha karmaşık bir JSON örneğine bakalım:

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

Bu örnekte 3. düzey, yalnızca bir alt öğesi olan GetCityForecastByZIPResponse'dır. Bu nedenle, <StripLevels>3</StripLevels> (ilk üç seviyeyi kaldırma) kullanırsanız JSON şu şekilde görünür:

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

GetCityForecastByZIPResult öğesinin birden fazla alt öğesi olduğuna dikkat edin. Birden fazla alt öğe içeren ilk öğe olduğundan, bu son düzeyi <StripLevels>4</StripLevels> kullanarak kaldırabilirsiniz. Bu işlem sonucunda aşağıdaki JSON elde edilir:

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

4. seviye birden fazla çocuk içeren ilk seviye olduğundan bu seviyenin altındaki seviyeleri kaldıramazsınız. Şerit seviyesini 5, 6, 7 vb. olarak ayarlarsanız yukarıdaki yanıtı almaya devam edersiniz.

Varsayılan 0 (düzey kaldırma yok)
Varlık (Presence) İsteğe bağlı
Tür Tamsayı

<Options>/<TreatAsArray>/<Path> öğesi

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

Bu öğe kombinasyonu, bir XML dokümanındaki değerlerin bir JSON dizisine yerleştirilmesini sağlar. Örneğin, alt öğe sayısı değişebildiğinde (birden bire) ve değerlerin her zaman bir dizide olmasını istediğinizde bu özellik kullanışlıdır. Bu sayede, diziden her seferinde aynı şekilde veri alabileceğiniz için kodunuzun kararlı kalmasına yardımcı olursunuz. Örneğin: $.teachers.teacher.studentnames[0], dizideki değer sayısından bağımsız olarak dizideki ilk öğrenci adı değerini alır.

Bir adım geri gidip XML'den JSON'a varsayılan davranışına bakalım, ardından <TreatAsArray>/<Path> kullanarak çıkışı nasıl kontrol edeceğimizi inceleyelim.

Bir XML belgesi, birden fazla alt değere sahip bir öğe içerdiğinde (genellikle öğenin maxOccurs='unbounded' olduğu bir şemaya göre), XML'den JSON'a politikası bu değerleri otomatik olarak bir diziye yerleştirir. Örneğin, aşağıdaki XML bloğu

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

...özel politika yapılandırması olmadan otomatik olarak aşağıdaki JSON'a dönüştürülür:

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

İki öğrenci adının bir diziye yerleştirildiğini unutmayın.

Ancak XML belgesinde yalnızca bir öğrenci görünüyorsa XML'den JSON'a politikası, değeri aşağıdaki örnekte gösterildiği gibi bir dizeler dizisi değil, tek bir dize olarak otomatik olarak ele alır:

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

Önceki örneklerde benzer veriler farklı şekilde dönüştürülmüştü. Birinde dizi, diğerinde ise tek bir dize olarak dönüştürülmüştü. <TreatAsArray>/<Path> öğesi, çıkışı kontrol etmenizi sağlar. Örneğin, yalnızca tek bir değer olsa bile öğrenci adlarının her zaman bir dizide yer almasını sağlayabilirsiniz. Bunu, değerlerini bir diziye yerleştirmek istediğiniz öğenin yolunu belirleyerek yapılandırabilirsiniz. Örneğin:

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

Yukarıdaki yapılandırma, JSON'u şu şekilde yazar:

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

student1'in artık bir dizide olduğunu fark edin. Artık öğrenci sayısı bir veya birden fazla olsa da aşağıdaki JSONPath'i kullanarak kodunuzdaki bir JSON dizisinden öğrencileri alabilirsiniz: $.teachers.teacher.studentnames.name[0]

<Path> öğesinin bir de unwrap özelliği vardır. Bu özellik, sonraki bölümde açıklanmaktadır.

Varsayılan Yok
Varlık (Presence) İsteğe bağlı
Tür Dize

Özellikler

 <Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>
Özellik Açıklama Varlık Tür
sarmalamayı açma

Varsayılan: false

Öğeyi JSON çıkışından kaldırır. Bu işlevi, JSON'u basitleştirmek veya düzleştirmek ("açmak") için kullanın. Bu işlem, değerleri almak için gereken JSONPath'i de kısaltır. Örneğin, $.teachers.teacher.studentnames.name[*] yerine JSON'u düzleştirip $.teachers.studentnames[*] kullanabilirsiniz.

Aşağıda bir JSON örneği verilmiştir:

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

Bu örnekte, teacher öğesinin ve öğrenci adları name öğesinin gereksiz olduğunu söyleyebilirsiniz. Bu nedenle, bunları kaldırabilir veya paketinden çıkarabilirsiniz. Bunu yapmak için <Path> öğesini şu şekilde yapılandırabilirsiniz:

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

unwrap özelliği true olarak ayarlanır ve sarmalaması açılacak öğelerin yolları sağlanır. JSON çıkışı artık şu şekilde görünecek:

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

<Path> öğesi <TreatAsArray> öğesinde olduğundan, yoldaki her iki öğenin de JSON çıkışında dizi olarak değerlendirileceğini unutmayın.

İsteğe bağlı Boole

Daha fazla örnek ve özelliklerle ilgili adım adım açıklamalar için şu Apigee Topluluğu makalesine bakın: Topluluk eğitimi: XML'den JSON'a politikasındaki TreatAsArray seçeneği.

<Format>

Biçim, XML'den JSON'a dönüştürme işlemi üzerinde kontrol sahibi olmanızı sağlar. Bu konuda açıklanan belirli bir Seçenek öğeleri kombinasyonunu içeren önceden tanımlanmış bir şablonun adını girin. Önceden tanımlanmış biçimler şunlardır: xml.com, yahoo, google, badgerFish.

<Format> öğesini veya <Options> grubunu kullanın. Hem <Format> hem de <Options> kullanamazsınız.

Aşağıda, önceden tanımlanmış her şablonun biçim tanımları verilmiştir.

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>

Öğe söz dizimi:

<Format>yahoo</Format>
Varsayılan Kullanılabilir bir biçimin adını girin:
xml.com, yahoo, google, badgerFish
Varlık (Presence) <Options> kullanılmıyorsa zorunludur.
Tür Dize

Şemalar


Hata referansı

Bu bölümde, bu politika bir hatayı tetiklediğinde döndürülen hata kodları ve hata mesajlarının yanı sıra Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Hata kuralları geliştirirken bu bilgilerin farkında olmanız önemlidir. hoşuma gitmesi için bir fırsattır. Daha fazla bilgi için Bilmeniz gerekenler Politika hataları ve Kullanım sorun.

Çalışma zamanı hataları

Bu hatalar, politika yürütüldüğünde ortaya çıkabilir.

Hata kodu HTTP durumu Neden Düzelt
steps.xmltojson.ExecutionFailed 500 Bu hata, giriş yükü (XML) boş olduğunda veya giriş XML'si geçersiz ya da bozuk olduğunda ortaya çıkar.
steps.xmltojson.InCompatibleType 500 Bu hata, <Source> öğesinde tanımlanan değişkenin türü ve <OutputVariable> öğesi aynı değil. Değişkenlerin türü, sistem tarafından <Source> öğesinin içinde bulunur ve <OutputVariable> öğesi eşleşir.
steps.xmltojson.InvalidSourceType 500 Bu hata, <Source> öğesini tanımlamak için kullanılan değişkenin türü geçersiz.Geçerli değişken türleri mesaj ve dizedir.
steps.xmltojson.OutputVariableIsNotAvailable 500 Bu hata, XML'in <Source> öğesinde belirtilen değişken JSON politikası dize türünde ve <OutputVariable> öğesi tanımlı değil. <Source> içinde tanımlanan değişken için <OutputVariable> öğesi zorunludur öğesi dize türünde.
steps.xmltojson.SourceUnavailable 500 Bu hata, ileti XML'den JSON'a politikasının <Source> öğesinde belirtilen değişken aşağıdakilerden biridir:
  • Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
  • çözülemiyor (tanımlanmamış)

Dağıtım hataları

Bu politikayı içeren bir proxy dağıttığınızda bu hatalar oluşabilir.

Hata adı Neden Düzelt
EitherOptionOrFormat <Options> veya <Format> öğelerinden biri değilse JSON Politikası'na bildirirseniz API proxy'sinin dağıtımı başarısız olur.
UnknownFormat XML'den JSON'ye politikası içindeki <Format> öğesi bilinmiyorsa biçimi tanımlanırsa API proxy'sinin dağıtımı başarısız olur. Önceden tanımlanmış biçimler şunlardır: xml.com, yahoo, google ve badgerFish.

Hata değişkenleri

Bu değişkenler, çalışma zamanı hatası oluştuğunda ayarlanır. Daha fazla bilgi için Bilmeniz gerekenler hakkında daha fazla bilgi edinin.

Değişkenler Konum Örnek
fault.name="fault_name" fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelendiği gibi hatanın adıdır. Hata adı, hata kodunun son kısmıdır. fault.name = "SourceUnavailable"
xmltojson.policy_name.failed policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. xmltojson.XMLtoJSON-1.failed = true

Örnek hata yanıtı

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

Örnek hata kuralı

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

İlgili konular

JSON'dan XML'ye: JSON to XML policy (JSON'dan XML'ye politikası)