XMLtoJSON politikası

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Ne?

Bu politika, mesajları genişletilebilir biçimlendirme dili (XML) biçiminden JavaScript'e dönüştürür Object Notation (JSON) gibi bir araç sayesinde, iletilerin nasıl göründüğünü kontrol edebilirsiniz. dönüştürüldü.

Amacın XML biçimli bir yanıtı JSON biçimli bir yanıta dönüştürmek olduğu varsayıldığında politika, yanıt Akışına eklenir (örneğin, Yanıt / ProxyUç Noktası / PostFlow).

Hakkında

Tipik bir uyumlulaştırma senaryosunda, gelen istek akışındaki JSON'den XML'e politika genellikle giden yanıt akışında bir XML'den JSON'ye politikasıyla eşleştirilir. Politikaları bu şekilde birleştirerek yerel olarak yalnızca XML'i destekleyen arka uç hizmetleri için JSON API gösterilebilir.

API'lerin JSON veya XML'den XML'e ve XML'den JSON'a yapılandırılarak yanıt biçimi dinamik olarak ayarlanabilir. koşullu olarak yürütülmesini sağlamaktır. Akış değişkenleri ve koşulları konusuna bakın. senaryonun uygulanmasına göz atalım.


Örnekler

JSON ve XML arasında dönüştürme konusunda ayrıntılı bir tartışma için http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html sayfasına bakın.

Yanıt dönüştürme

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

XML'yi dönüştürmek için gereken minimum yapılandırma olan bu yapılandırma, JSON—kaynak olarak XML biçimli bir yanıt mesajı alır ve ardından response ÇıktıDeğişkeni içinde doldurulan JSON biçimli mesaj. Kenar bu değişkenin içeriğini bir sonraki işleme adımı için mesaj olarak otomatik şekilde 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>

&lt;XMLtoJSON&gt; özellikler

<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

&lt;Source&gt; öğe

Dönüştürmek istediğiniz XML mesajını içeren değişken, istek veya yanıt JSON biçiminde olmalıdır.

Kaynak mesajın HTTP Content-type üstbilgisi şuna ayarlanmalıdır: application/xml, aksi takdirde politika zorunlu kılınmaz.

<Source> tanımlanmazsa mesaj olarak kabul edilir (çözümleri politika bir istek akışına eklendiğinde veya politika eklendiğinde yanıt almak için yanıt akışı).

Kaynak değişken çözümlenemezse veya mesaj olmayan bir türe dönüşürse politika hata verir.

<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

&lt;OutputVariable&gt; öğe

XML'den JSON biçimine dönüştürme çıkışını depolar. Bu genellikle kaynaklandığı için, 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. HTTP Content-type ise XML biçimli mesajın üstbilgisi application/json olarak ayarlanır.

OutputVariable belirtilmezse source şu şekilde kabul edilir: OutputVariable Örneğin, source response ise ardından OutputVariable, varsayılan olarak response değerine ayarlanır.

<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ündeyse bu öğe zorunludur.
Tür mesaj

&lt;Options&gt;

Seçenekler, XML'den JSON'ye dönüştürme işlemi üzerinde kontrol sahibi olmanızı sağlar. Şunu kullanın: <Options> grubu, belirli dönüşüm ayarları eklemenize olanak tanır veya <Format> öğesi içerir, bu öğe ile ilgili bir şablonunuza referans verebilirsiniz: önceden tanımlanmış seçeneklerdir. <Options> ile birlikte kullanılamaz <Format>.

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

&lt;Options&gt;/&lt;RecognizeNumber&gt; öğe

Bu durumda, XML yükündeki sayı alanları orijinal biçimini korur.

<RecognizeNumber>true</RecognizeNumber>

Aşağıdaki XML örneğini göz önünde bulundurun:

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

true ise şuna dönüştürür:

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

false ise şuna dönüştürür:

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

&lt;Options&gt;/&lt;RecognizeBoolean&gt; öğe

Değerleri dizeler için geçerlidir.

<RecognizeBoolean>true</RecognizeBoolean>

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

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

true ise şuna dönüştürür:

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

false ise şuna dönüştürür:

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

&lt;Options&gt;/&lt;RecognizeNull&gt; öğe

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 şuna dönüştürür:

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

false ise şuna dönüştürür:

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

&lt;Options&gt;/&lt;NullValue&gt; öğe

Kaynak mesajda tanınan boş değerlerin hangi değere sahip olması gerektiğini belirtir dönüştürüldü. Varsayılan olarak bu değer null şeklindedir. Bu seçenek yalnızca RecognizeNull doğruysa.

<NullValue>not-present</NullValue>

Varsayılan null
Bulunma İsteğe bağlı
Tür Dize

&lt;Options&gt;/&lt;NamespaceBlockName&gt;
&lt;Options&gt;/&lt;DefaultNamespaceNodeName&gt;
&lt;Options&gt;/&lt;NamespaceSeparator&gt; öğeler

Bu öğeleri birlikte kullanın.

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

Aşağıdaki XML örneğini göz önünde bulundurun:

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

NamespaceSeparator belirtilmezse aşağıdaki JSON yapısı şöyledir: oluşturulma tarihi:

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

NamespaceBlockName, DefaultNamespaceNodeName ve NamespaceSeparator; #namespaces, &, ve *** olduğunda 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ı
Ancak, <NamespaceBlockName> belirtirseniz iki öğe bulunuyor.
Tür Dize

&lt;Options&gt;/&lt;TextAlwaysAsProperty&gt;
&lt;Options&gt;/&lt;TextNodeName&gt; öğeler

Bu öğeleri birlikte kullanın.

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

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

TextAlwaysAsProperty, false ve TextNodeName, TEXT olarak belirtildi. Aşağıdaki JSON yapısı şöyledir: oluşturulma tarihi:

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

&lt;Options&gt;/&lt;AttributeBlockName&gt;
&lt;Options&gt;/&lt;AttributePrefix&gt; öğeler

Bu öğeleri birlikte kullanın.

Değerleri bir JSON blokunda gruplandırmanıza ve özellik adlarına ön ek eklemenize olanak tanır.

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

Aşağıdaki XML örneğini göz önünde bulundurun:

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

Özelliklerin ikisi de (AttributeBlockName ve AttributePrefix) XML'den JSON'a örneğinde tanımlandığı gibi belirtildiği gibi, 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şturulma tarihi:

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

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

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

&lt;Options&gt;/&lt;OutputPrefix&gt;
&lt;Options&gt;/&lt;OutputSuffix&gt; öğeler

Bu öğeleri birlikte kullanın.

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

Aşağıdaki XML örneğini göz önünde bulundurun:

<a>value</a>

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

&lt;Options&gt;/&lt;StripLevels&gt; öğe

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

SOAP gibi XML yüklerinde, JSON biçiminde dönüştürülmüştür. 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 seviyesine ulaşmadan önce 4 seviye vardır. <StripLevels> kullanılmadığında, dönüştürülen JSON yanıtı şöyle görünür: bu:

{
   "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>. Bu metrik sayesinde şunları elde edebilirsiniz: JSON:

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

Birden çok alt öğe içeren ilk öğeye kadar düzeyleri kaldırabilirsiniz. Ne işe yarar? bunun anlamı nedir? 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 olan GetCityForecastByZIPResponse, yalnızca bir alt öğesi olarak görünür. Yani <StripLevels>3</StripLevels> kullanıyorsanız ( JSON dosyası şöyle görünür:

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

GetCityForecastByZIPResult alan adının birden fazla alt öğesi olduğuna dikkat edin. ABD'de öğesi birden çok alt öğe içeriyorsa bu son düzeyi, <StripLevels>4</StripLevels>, şunları sağlar: JSON:

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

4. seviye, birden çok alt seviyenin bulunduğu ilk seviye olduğundan hiçbir seviyeyi çıkaramazsınız. daha düşük olacaktır. Şerit düzeyini 5, 6 ve 7 gibi bir değere ayarlarsanız yanıt alın.

Varsayılan 0 (seviye çıkarma yok)
Bulunma İsteğe bağlı
Tür Tamsayı

&lt;Options&gt;/&lt;TreatAsArray&gt;/&lt;Path&gt; öğe

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

Bu öğe kombinasyonu, bir XML belgesindeki değerlerin JSON dosyasına yerleştirilmesini sağlar. dizisidir. Bu, örneğin alt öğelerin sayısı farklı olduğunda (birden fazla öğeden çoklu) içeriyorsa ve değerlerin her zaman bir dizide bulunduğundan emin olmak istersiniz. Bu sayede çünkü dizideki verileri her seferinde aynı şekilde alabilirsiniz. Örneğin, örnek: $.teachers.teacher.studentnames[0], ilk öğrenci adı değerini alır dizideki değer sayısından bağımsız olarak uygulanır.

Bir adım geri gidip XML'den JSON'ye varsayılan davranışa bakalım, daha sonra çıkışı kontrol etmek için <TreatAsArray>/<Path> kullanabilirsiniz.

Bir XML belgesi, birden çok alt değeri olan (genellikle bir şemaya dayalı olan) bir öğe içerdiğinde (maxOccurs='unbounded') XML'den JSON'ye politikası, otomatik olarak bu değerleri 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 olmadan otomatik olarak aşağıdaki JSON biçimine dönüştürülür yapılandırma:

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

İki öğrenci adının bir diziye yerleştirildiğine dikkat edin.

Ancak, XML dokümanında yalnızca bir öğrenci görünüyorsa XML'den JSON'ye politikası otomatik olarak değeri aşağıda gösterildiği gibi bir dize dizisi değil, tek bir dize olarak işler: örnek:

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

Önceki örneklerde, benzer veriler farklı bir şekilde, bir zamanlar dizi, diğeri ise tek bir dize. İşte <TreatAsArray>/<Path> öğesi burada çıkışı siz kontrol edersiniz. Örneğin, öğrenci adlarının her zaman bir diziyi otomatik olarak değiştirirsiniz. Bunu, değerini bir diziye koymak istediğiniz bir öğe olacaktır. Ö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"]
              }
            ]
          }
      }
}

Öğrenci1'in artık bir dizide olduğuna dikkat edin. Şimdi, ister bir ister birden fazla şu JSONPath'i kullanarak, bunları kodunuzdaki bir JSON dizisinden alabilirsiniz: $.teachers.teacher.studentnames.name[0].

<Path> öğesi, aşağıda açıklandığı şekilde bir unwrap özelliğine de sahiptir: ele alacağız.

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
sarmalamayı aç

Varsayılan: false

Öğeyi, JSON çıkışından kaldırır. Sadeleştirmek veya düzleştirmek ("sarmalama") için bunu kullanın değerleri almak için gereken JSONPath'i de kısaltan JSON biçiminde bir kod oluşturun. Örneğin, $.teachers.teacher.studentnames.name[*] yerine JSON olup $.teachers.studentnames[*] kullanın.

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 öğesi gerekli değil. Böylece bu iki feed'i kaldırabilir veya oluşturabilirsiniz. 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 doğru değerine ayarlanır ve öğelerin sarmalama açma süreci sağlanır. JSON çıkışı artık aşağıdaki gibi görünecektir:

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

<Path> öğesi <TreatAsArray> öğesi olursa Yol’daki her iki öğe de JSON çıkışında dizi olarak ele alınır.

İsteğe bağlı Boole

Daha fazla örnek ve bir özellik kılavuzu için şu Apigee Topluluğu makalesine bakın: https://community.apigee.com/content/kbentry/33374/new-edge-minifeature-the-treatasarray-option-in-th.html.

&lt;Format&gt;

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

<Format> öğesini veya <Options> grubunu kullanın. Kullanamazsınız <Format> ve <Options>.

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 biçimin adını girin:
xml.com, yahoo, google, badgerFish
Bulunma <Options> kullanılmıyorsa gereklidir.
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'e: JSON'dan XML'e politika