XMLtoJSON politikası

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

Ne

Bu politika, mesajları genişletilebilir işaretleme dili (XML) biçiminden JavaScript Object Notation (JSON) biçimine dönüştürerek size mesajların nasıl dönüştürüldüğünü kontrol etmeniz için çeşitli seçenekler sunar.

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

Hakkında

Tipik bir uyumlulaştırma senaryosunda, gelen istek akışındaki bir JSON-XML politikası genellikle giden yanıt akışında XML - JSON politikası ile eşleştirilir. Politikaları bu şekilde birleştirdiğinizde JSON API, yerel olarak yalnızca XML'i destekleyen arka uç hizmetleri için sunulabilir.

API'lerin JSON veya XML gerektiren çeşitli istemci uygulamaları tarafından tüketildiği senaryolarda yanıt biçimi, JSON'u XML'den XML'e ve XML'den JSON'e, koşullu olarak yürütülecek şekilde yapılandırarak dinamik olarak ayarlanabilir. Bu senaryonun uygulanması için Akış değişkenleri ve koşulları bölümüne bakın.


Sana Özel

JSON ve XML arasında dönüştürmeyle ilgili ayrıntılı bilgi için http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html adresini ziyaret edin.

Bir 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 Çıkış Değişkeni'nde doldurulan JSON biçiminde bir mesaj oluşturur. Edge, bir sonraki işleme adımında mesaj olarak bu değişkenin içeriğini otomatik 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çerebilir. Bu değer 255 karakterden uzun olamaz.

İsteğe bağlı olarak, politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için <DisplayName> öğesini kullanın.

Yok Gerekli
continueOnError

Bir politika başarısız olduğunda hata döndürülmesi için false olarak ayarlayın. Bu, çoğu politika için beklenen davranıştır.

Bir politika başarısız olduktan sonra bile akış yürütülmesinin devam etmesi için true değerine ayarlayın.

false İsteğe bağlı
enabled

Politikayı uygulamak için true değerine ayarlayın.

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

true İsteğe bağlı
async

Bu özellik kullanımdan kaldırıldı.

false Kullanımdan kaldırıldı

<DisplayName> öğesi

Politikayı, yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için name özelliğine ek olarak kullanın.

<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 biçimine dönüştürmek istediğiniz XML mesajını içeren değişken, istek veya yanıt.

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

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

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

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

<ExitVariable> öğesi

XML'den JSON biçimine dönüştürme işleminin çıkışını depolar. Bu genellikle kaynakla aynı değerdir. Yani genellikle XML yanıtı bir 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 değerlendirilir. Örneğin, source response ise OutputVariable varsayılan olarak response olur.

<OutputVariable>response</OutputVariable>
Varsayılan istek veya yanıt (politikanın API proxy akışına eklendiği yere göre belirlenir)
Bulunma <Source> öğesinde tanımlanan değişken dize türünde olduğunda bu öğe zorunludur.
Tür mesaj

<Seçenekler>

Seçenekler, XML'den JSON'a dönüşüm üzerinde kontrol sahibi olmanızı sağlar. Belirli dönüşüm ayarları eklemenizi sağlayan <Options> grubunu veya önceden tanımlanmış seçenekler şablonuna referans vermenizi sağlayan <Format> öğesini kullanın. Hem <Options> hem de <Format> kullanılamaz.

<Format> kullanmıyorsanız <Options> gereklidir.

<Options>/<RecognizeNumber> öğesi

Değer true ise 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 şekilde dönüştürülür:

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

false ise şu şekilde dönüştürülür:

{
    "a": {
        "b": "100",
        "c": "value"
    }
}
Varsayılan false
Bulunma İsteğe bağlı
Tür Boole

<Options>/<RecognizeBoole> öğesi

Dönüşümün, değerleri dizeye dönüştürmek yerine 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 şekilde dönüştürülür:

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

false ise şu şekilde dönüştürülür:

{
    "a": {
        "b": "true",
        "c": "value"
    }
}
Varsayılan false
Bulunma İsteğe bağlı
Tür Boole

<Options>/<RecognizeNull> öğesi

Boş değerleri boş 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 şekilde dönüştürülür:

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

false ise şu şekilde dönüştürülür:

{
  "a": {
    "b": {},
    "c": "value"
  }
}
Varsayılan false
Bulunma İsteğe bağlı
Tür Boole

<Options>/<NullValue> öğesi

Kaynak mesajda tanınan boş değerlerin hangi değere dönüştürülmesi gerektiğini belirtir. Varsayılan olarak bu değer null'dir. Bu seçenek yalnızca RecognizeNull doğruysa geçerli olur.

<NullValue>not-present</NullValue>

Varsayılan null
Bulunma İ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.
Bulunma İsteğe bağlı
Bununla birlikte, <NamespaceBlockName> değerini belirtirseniz diğer iki öğeyi de belirtmeniz gerekir.
Tür Dize

<Options>/<Text AlwaysAsproperty>
<Options>/<TextNodeName> öğeleri

Bu öğeleri birlikte kullanın.

true değerine ayarlanırsa XML öğesinin içeriği bir 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 ayarlanırsa ve TextNodeName, TEXT olarak belirtilirse aşağıdaki JSON yapısı oluşturulur:

{
  "a": {
    "b": "value1",
    "c": {
      "TEXT": [
        "value2",
        "value4"
      ],
      {
        "d": "value3",
      }
    }
}
Varsayılan <TextAlwaysAsProperty>: yanlış
<TextNodeName>: Yok
Bulunma İsteğe bağlı
Tür <TextAlwaysAsProperty>: Boole
<TextNodeName>: Dize

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

Bu öğeleri birlikte kullanın.

Değerleri bir JSON bloğunda gruplandırmanıza ve özellik adlarına önek 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 geçiş örneğinde tanımlandığı gibi belirtildiyse 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.
Bulunma İsteğe bağlı
Tür Dize

<Options>/<ExitPrefix>
<Options>/<ExitSuffix> öğeleri

Bu öğeleri birlikte kullanın.

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

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

<a>value</a>

Her iki özellik de (OutputPrefix ve OutputSuffix) XML'den JSON'a geçiş örneğinde tanımlandığı gibi belirtildiyse 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

OutputPrefix veya OutputSuffix belirtilmezse aşağıdaki JSON yapısı oluşturulur:

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

<Options>/<StripLevels> öğesi

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

Bazen SOAP gibi XML yükleri, dönüştürülen JSON'a dahil etmek istemediğiniz birçok üst düzeye sahip olabilir. Birçok düzey içeren bir SOAP yanıtı örneği:

<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 seviyelerine ulaşmadan önce 4 seviye vardır. <StripLevels> kullanılmadığında dönüştürülen JSON yanıtı şöyle görünür:

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

JSON yanıtında bu ilk 4 düzeyi çıkarmak isterseniz <StripLevels>4</StripLevels> parametresini ayarlayarak aşağıdaki JSON değerini alırsınız:

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

Birden fazla alt öğe içeren ilk öğeye kadar düzeyleri kaldırabilirsiniz. Bu ne anlama geliyor? 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'dir. Yani <StripLevels>3</StripLevels> (ilk üç seviyeyi kaldırın) kullanırsanız JSON aşağıdaki gibi 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 çok alt öğe içeren ilk öğe olduğundan bu son düzeyi, <StripLevels>4</StripLevels> kullanarak çıkartabilirsiniz. Bunu yaptığınızda aşağıdaki JSON sağlanır:

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

4. düzey, birden çok alt öğe içeren ilk seviye olduğundan bundan daha düşük düzeyleri kaldıramazsınız. Şerit düzeyini 5, 6, 7 vb. olarak ayarlarsanız yukarıdaki yanıtı almaya devam edersiniz.

Varsayılan 0 (seviye çıkarma yok)
Bulunma İ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 belgesindeki değerlerin bir JSON dizisine yerleştirilmesini sağlar. Örneğin, alt öğelerin sayısının değişebileceği (birden birden çoka) ve değerlerin her zaman bir dizide yer aldığından emin olmak istediğinizde bu yöntem faydalı olur. Bu yöntem, her zaman diziden aynı şekilde veri alabilmeniz için kodunuzun sabit kalmasına yardımcı olur. Ö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 gidelim ve XML - JSON varsayılan davranışına göz atalım ve <TreatAsArray>/<Path> kullanarak çıkışı nasıl kontrol edeceğinizi keşfedin.

Bir XML belgesi birden çok alt değere sahip bir öğe içerdiğinde (genellikle öğenin maxOccurs='unbounded' öğesinin olduğu bir şemaya dayanır) 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 bir politika yapılandırması olmadan otomatik olarak aşağıdaki JSON biçimine dönüştürülür:

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

İki öğrenci adının bir diziye konduğuna dikkat edin.

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 otomatik olarak bir dize dizisi değil, tek bir dize olarak işler:

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

Önceki örneklerde, benzer veriler bir kez dizi, diğeri tek bir dize olarak farklı şekilde dönüştürülmüştür. Burada <TreatAsArray>/<Path> öğesi, çıkışı kontrol etmenizi sağlar. Örneğin, tek bir değer olsa bile öğrenci adlarının her zaman bir diziye yerleştirilmesini sağlayabilirsiniz. Bunu, değerlerini bir diziye yerleştirmek istediğiniz öğenin Yolunu tanımlayarak yapılandırırsınız. Örneğin:

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

Yukarıdaki yapılandırmada JSON şu şekilde yazılır:

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

öğrenci1'in artık bir dizide olduğuna dikkat edin. Artık, bir veya daha fazla öğrenci olduğundan bağımsız olarak bunları aşağıdaki JSONPath kullanarak kodunuzdaki bir JSON dizisinden alabilirsiniz: $.teachers.teacher.studentnames.name[0]

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

Varsayılan Yok
Bulunma İ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
sarmayı açmak

Varsayılan: false

Öğeyi JSON çıkışından kaldırır. JSON dosyasını sadeleştirmek veya düzleştirmek ("sarmalarını açmak") için bunu 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ştirebilir ve $.teachers.studentnames[*] kullanabilirsiniz.

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

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

Bu örnekte, teacher öğesi ve öğrenciadı name öğesinin gereksiz olduğunu iddia edebilirsiniz. Dolayısıyla bunları kaldırabilir veya açabilirsiniz. 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 sarmalamanın açılacağı öğelere giden yollar sağlanır. JSON çıkışı artık şöyle görünür:

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

<Path> öğesi <TreatAsArray> öğesinde bulunduğu için Yol'daki her iki öğenin de JSON çıktısında dizi olarak değerlendirileceğini unutmayın.

İsteğe bağlı Boole

Daha fazla örnek ve adım adım açıklamalı özellik için şu Apigee Topluluğu makalesini inceleyin: https://community.apigee.com/content/kbentry/33374/new-edge-minifeature-the-treatasarray-option-in-th.html.

<Biçim>

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

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

Önceden tanımlanmış her bir şablonun Biçim tanımları aşağıda 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
Bulunma <Options> kullanılmıyorsa zorunludur.
Tür Dize

Şemalar


Hata referansı

Bu bölümde, bu politika bir hatayı tetiklediğinde Edge tarafından ayarlanan hata kodları ile hata mesajları ve döndürülen hata mesajları ile Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Bu bilgiyi, hataları ele almak için hata kuralları geliştirip geliştirmediğinizi bilmeniz önemlidir. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler ve Hataları işleme bölümlerine bakın.

Çalışma zamanı hataları

Politika yürütüldüğünde bu hatalar 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'i geçersiz ya da hatalı olduğunda ortaya çıkar.
steps.xmltojson.InCompatibleType 500 Bu hata, <Source> öğesinde ve <OutputVariable> öğesinde tanımlanan değişkenin türü aynı değilse ortaya çıkar. <Source> öğesi ve <OutputVariable> öğesi içinde yer alan değişkenlerin türünün eşleşmesi zorunludur.
steps.xmltojson.InvalidSourceType 500 Bu hata, <Source> öğesini tanımlamak için kullanılan değişken türü geçersizse ortaya çıkar.Geçerli değişken türleri mesaj ve dizedir.
steps.xmltojson.OutputVariableIsNotAvailable 500 Bu hata, XML'den JSON'a Geçiş politikasının <Source> öğesinde belirtilen değişken dize türündeyse ve <OutputVariable> öğesi tanımlı değilse ortaya çıkar. <Source> öğesinde tanımlanan değişken dize türündeyse <OutputVariable> öğesi zorunludur.
steps.xmltojson.SourceUnavailable 500 Bu hata, XML'den JSON'a geçiş politikasının <Source> öğesinde belirtilen message değişkeni şunlardan biriyse ortaya çıkar:
  • kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
  • çözülemiyor (tanımlanmadı)

Dağıtım hataları

Bu hatalar, bu politikayı içeren bir proxy dağıttığınızda ortaya çıkabilir.

Hata adı Neden Düzelt
EitherOptionOrFormat <Options> veya <Format> öğelerinden biri XML'den JSON'a Geçiş Politikası'nda tanımlanmamışsa API proxy'sinin dağıtımı başarısız olur.
UnknownFormat XML'den JSON'a geçiş politikasındaki <Format> öğesi için bilinmeyen bir biçim tanımlanmışsa API proxy'sinin dağıtımı başarısız olur. Önceden tanımlanmış biçimler şunları içerir: xml.com, yahoo, google ve badgerFish.

Hata değişkenleri

Bu değişkenler, bir çalışma zamanı hatası oluştuğunda ayarlanır. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler bölümüne bakın.

Değişkenler Konum Örnek
fault.name="fault_name" fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelenen 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"
    }
  }
}

Hata kuralı örneği

<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'e: JSON'den XML'e politika