Halaman ini berlaku untuk Apigee dan Apigee Hybrid.
  
    Lihat dokumentasi 
    Apigee Edge.
  
  
      
 
  
Apa
Kebijakan ini mengonversi pesan dari format extensible markup language (XML) ke JavaScript Object Notation (JSON), sehingga memberi Anda beberapa opsi untuk mengontrol cara pesan dikonversi.
Dengan asumsi bahwa tujuannya adalah mengonversi respons berformat XML menjadi respons berformat JSON, kebijakan akan dilampirkan ke Flow respons (misalnya, Response / ProxyEndpoint/PostFlow).
Kebijakan ini adalah kebijakan Standar dan dapat di-deploy ke jenis lingkungan apa pun. Untuk mengetahui informasi tentang jenis dan ketersediaan kebijakan dengan setiap jenis lingkungan, lihat Jenis kebijakan.
Tentang
Dalam skenario mediasi umum, kebijakan JSON ke XML pada alur permintaan masuk sering dipasangkan dengan kebijakan XML ke JSON pada alur respons keluar. Dengan menggabungkan kebijakan seperti ini, JSON API dapat diekspos untuk layanan backend yang secara native hanya mendukung XML.
Untuk skenario saat API digunakan oleh beragam aplikasi klien yang mungkin memerlukan JSON atau XML, format respons dapat ditetapkan secara dinamis dengan mengonfigurasi kebijakan JSON ke XML dan XML ke JSON agar dijalankan secara bersyarat. Lihat Variabel dan kondisi alur untuk penerapan skenario ini.
Sampel
Untuk mengetahui pembahasan mendetail tentang konversi antara JSON dan XML, lihat artikel ini.
Mengonversi respons
<XMLToJSON name="ConvertToJSON"> <Options> </Options> <OutputVariable>response</OutputVariable> <Source>response</Source> </XMLToJSON>
Konfigurasi ini—yang merupakan konfigurasi minimal yang diperlukan untuk mengonversi XML ke
      JSON—mengambil pesan respons berformat XML sebagai sumber, lalu membuat
      pesan berformat JSON yang diisi di OutputVariable response. Apigee
      secara otomatis menggunakan konten variabel ini sebagai pesan untuk langkah pemrosesan berikutnya.
Referensi elemen
Berikut adalah elemen dan atribut yang dapat Anda konfigurasi pada kebijakan ini.
<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>
Atribut <XMLtoJSON>
<XMLtoJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">
Tabel berikut menjelaskan atribut yang umum untuk semua elemen induk kebijakan:
| Atribut | Deskripsi | Default | Kehadiran | 
|---|---|---|---|
name | 
        
           Nama internal kebijakan. Nilai atribut  Secara opsional, gunakan elemen   | 
        T/A | Wajib | 
continueOnError | 
        
           Tetapkan ke  Tetapkan ke   | 
        false | Opsional | 
enabled | 
        
           Tetapkan ke  Tetapkan ke   | 
        benar | Opsional | 
async | 
        
           Atribut ini tidak digunakan lagi.  | 
        false | Tidak digunakan lagi | 
Elemen <DisplayName>
Gunakan selain atribut name untuk melabeli kebijakan di editor proxy UI pengelolaan dengan nama bahasa alami yang berbeda.
<DisplayName>Policy Display Name</DisplayName>
| Default | 
           T/A Jika Anda menghapus elemen ini, nilai atribut   | 
      
|---|---|
| Kehadiran | Opsional | 
| Jenis | String | 
Elemen <Source>
Variabel yang menentukan pesan XML yang ingin Anda konversi ke JSON.
Header HTTP Content-type pesan sumber harus ditetapkan ke
  application/xml, jika tidak, kebijakan tidak akan diterapkan.
Jika <Source> tidak ditentukan, maka akan diperlakukan sebagai message,
    yang diselesaikan menjadi request saat kebijakan dilampirkan ke alur permintaan, atau 
    response saat kebijakan dilampirkan ke alur respons.
Jika variabel sumber tidak dapat diselesaikan, atau diselesaikan ke jenis non-pesan, kebijakan akan menampilkan error.
<Source>response</Source>
| Default | Nilai elemen Source | 
      
|---|---|
| Kehadiran | Opsional | 
| Jenis | Pesan | 
Elemen <OutputVariable>
Menentukan tempat untuk menyimpan output konversi format XML ke JSON. Biasanya, elemen ini tidak disertakan dalam konfigurasi kebijakan.
Apigee mem-parsing payload pesan XML yang ditentukan dalam Source, mengonversinya
    menjadi JSON, menyimpan hasilnya ke dalam payload OutputVariable, dan menetapkan header
    Jenis konten HTTP pesan OutputVariable ke application/json.
Jika OutputVariable tidak ditentukan, nilai Source akan digunakan
    secara default. Misalnya, jika source adalah response,
    maka OutputVariable secara default adalah response.
<OutputVariable>response</OutputVariable>
| Default | pesan yang ditentukan dalam Source | 
      
|---|---|
| Kehadiran | Opsional | 
| Jenis | Pesan | 
<Options>
Opsi memberi Anda kontrol atas konversi dari XML ke JSON. Gunakan grup
  <Options>, yang memungkinkan Anda menambahkan setelan konversi tertentu, atau elemen
  <Format>, yang memungkinkan Anda mereferensikan template
  opsi yang telah ditentukan sebelumnya. Anda tidak dapat menggunakan <Options> dan
  <Format> secara bersamaan.
<Options> wajib ada jika <Format> tidak digunakan.
Elemen <RecognizeNumber>
Jika benar (true), kolom angka dalam payload XML akan mempertahankan format aslinya.
<RecognizeNumber>true</RecognizeNumber>
Perhatikan contoh XML berikut:
<a> <b>100</b> <c>value</c> </a>
Jika RecognizeNumber adalah true, kebijakan akan mengonversinya menjadi:
{
    "a": {
        "b": 100,
        "c": "value"
    }
}Jika RecognizeNumber adalah false, kebijakan akan mengonversinya menjadi:
{
  "a": {
    "b": "100",
    "c": "value"
  }
}| Default | false | 
|---|---|
| Kehadiran | Opsional | 
| Jenis | Boolean | 
Elemen <RecognizeBoolean>
Memungkinkan konversi mempertahankan nilai benar/salah boolean, bukan mengubah nilai menjadi string.
<RecognizeBoolean>true</RecognizeBoolean>
Untuk contoh XML berikut:
<a> <b>true</b> <c>value</c> </a>
Jika RecognizeBoolean adalah true, kebijakan akan mengonversinya menjadi:
{
    "a": {
        "b": true,
        "c": "value"
    }
}Jika RecognizeBoolean adalah false, kebijakan akan mengonversinya menjadi:
{
    "a": {
        "b": "true",
        "c": "value"
    }
}| Default | false | 
|---|---|
| Kehadiran | Opsional | 
| Jenis | Boolean | 
Elemen <RecognizeNull>
Memungkinkan Anda mengonversi nilai kosong menjadi nilai null.
<RecognizeNull>true</RecognizeNull>
Untuk XML berikut:
<a> <b></b> <c>value</c> </a>
Jika RecognizeNull adalah true, dan jika tidak ada opsi NullValue, XML ini akan dikonversi menjadi:
{
  "a": {
    "b": null,
    "c": "value"
  }
}Jika RecognizeNull adalah false, XML ini akan dikonversi menjadi:
{
  "a": {
    "b": {},
    "c": "value"
  }
}| Default | false | 
|---|---|
| Kehadiran | Opsional | 
| Jenis | Boolean | 
Elemen <NullValue>
Menunjukkan nilai yang akan digunakan untuk mengonversi nilai null yang dikenali dalam pesan sumber. Secara default, nilainya adalah null. Opsi ini hanya efektif
    jika RecognizeNull benar (true).
<NullValue>not-present</NullValue>
Untuk XML berikut:
<a> <b></b> <c>value</c> </a>
Jika RecognizeNull adalah true, dan NullValue tidak ditentukan,
    XML ini dikonversi menjadi:
{
  "a": {
    "b": null,
    "c": "value"
  }
}Jika RecognizeNull adalah true, dan NullValue adalah
    not-present, XML ini akan dikonversi menjadi:
{
  "a": {
    "b": "not-present",
    "c": "value"
  }
}| Default | null | 
      
|---|---|
| Kehadiran | Opsional | 
| Jenis | String | 
Opsi namespace
Secara default, kebijakan ini menghilangkan namespace XML dalam JSON yang dihasilkan. Untuk menentukan bahwa namespace dalam dokumen XML harus diterjemahkan ke dalam JSON yang dihasilkan, gunakan elemen ini bersama-sama.
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName> <NamespaceSeparator>***</NamespaceSeparator>
Perhatikan contoh XML berikut:
<a xmlns="http://ns.com" xmlns:ns1="http://ns1.com"> <ns1:b>value</ns1:b> </a>
Jika NamespaceSeparator tidak ditentukan, struktur JSON berikut akan
  dibuat:
{
    "a": {
        "b": "value"
    }
}Jika elemen NamespaceBlockName, DefaultNamespaceNodeName, dan
  NamespaceSeparator masing-masing ditentukan sebagai #namespaces, &,
  dan ***, maka struktur JSON berikut akan dihasilkan:
{
    "a": {
        "#namespaces": {
            "&": "http://ns.com",
            "ns1": "http://ns1.com"
        },
        "ns1***b": "value"
    }
}| Default | Tidak ada. Jika <NamespaceBlockName> tidak ditentukan, kebijakan akan
          menghasilkan JSON output yang tidak merujuk ke namespace XML apa pun, terlepas dari apakah
          pesan sumber merujuk ke namespace. | 
      
|---|---|
| Kehadiran | Opsional Namun, jika Anda menentukan <NamespaceBlockName>, Anda juga harus menentukan
          dua elemen lainnya. | 
        
| Jenis | String | 
Opsi teks
Gunakan elemen ini bersama-sama.
      <TextAlwaysAsProperty>true|false</TextAlwaysAsProperty>
      <TextNodeName>TEXT</TextNodeName>Saat kebijakan menemukan elemen XML yang hanya berisi satu node teks sebagai turunan, kebijakan menerjemahkan konten teks elemen XML tersebut menjadi properti dalam hash JSON.
Saat kebijakan menemukan elemen XML yang berisi beberapa turunan dengan konten campuran, opsi ini memungkinkan Anda mengontrol JSON output dari semua node teks turunan.
Misalnya, pertimbangkan konfigurasi kebijakan ini:
<XMLToJSON name='XMLToJSON-1'>
  <Options>
    <TextAlwaysAsProperty>???</TextAlwaysAsProperty>
    <TextNodeName>#text</TextNodeName>
  </Options>
</XMLToJSON>Untuk input XML tertentu, kebijakan akan menghasilkan output berikut, bergantung pada
      apakah TextAlwaysAsProperty adalah true atau false:
| Input XML | Output JSON | |
|---|---|---|
saat TextAlwaysAsProperty adalah false | 
          saat TextAlwaysAsProperty adalah true | 
        |
          <a>value1</a>  | 
          
            {
  "a": "value1"
} | 
          
            {
  "a": {
    "#text": "value1"
  }
} | 
        
          <a>value1 <b>value2</b> </a>  | 
          
            {
  "a": {
    "#text": "value1\n",
    "b": "value2"
  }
} | 
          
            {
  "a": {
    "#text": "value1\n",
    "b": {
      "#text": "value2"
    }
  }
} | 
        
| Default | <TextAlwaysAsProperty>: false<TextNodeName>: (string kosong) | 
      
|---|---|
| Kehadiran | Opsional | 
| Jenis | <TextAlwaysAsProperty>: Boolean<TextNodeName>: String | 
      
Opsi atribut
Bersama-sama, elemen ini memungkinkan Anda mengelompokkan nilai atribut ke dalam blok JSON dan menambahkan awalan ke nama atribut.
<AttributeBlockName>FOO_BLOCK</AttributeBlockName> <AttributePrefix>BAR_</AttributePrefix>
Perhatikan contoh XML berikut:
<a attrib1="value1" attrib2="value2"/>
Jika kedua atribut (AttributeBlockName dan AttributePrefix) ditentukan
  seperti yang ditentukan dalam contoh XML ke JSON, struktur JSON berikut akan dibuat:
{
  "a": {
    "FOO_BLOCK": {
      "BAR_attrib1": "value1",
      "BAR_attrib2": "value2"
    }
  }
}Jika hanya AttributeBlockName yang ditentukan, struktur JSON berikut akan
  dibuat:
{
    "a": {
        "FOO_BLOCK": {
            "attrib1": "value1",
            "attrib2": "value2"
        }
    }
}Jika hanya AttributePrefix yang ditentukan, struktur JSON berikut akan
  dibuat:
{
    "a": {
        "BAR_attrib1": "value1",
        "BAR_attrib2": "value2"
    }
}Jika tidak ada yang ditentukan, struktur JSON berikut akan dibuat:
{
    "a": {
        "attrib1": "value1",
        "attrib2": "value2"
    }
}| Default | tidak ada. | 
|---|---|
| Kehadiran | Opsional | 
| Jenis | String | 
Elemen <OutputPrefix> dan <OutputSuffix>
Gunakan elemen ini bersama-sama untuk menerapkan awalan dan/atau akhiran ke JSON yang dihasilkan.
<OutputPrefix>PREFIX_</OutputPrefix> <OutputSuffix>_SUFFIX</OutputSuffix>
Perhatikan contoh XML berikut:
<a>value</a>
Misalkan konfigurasi kebijakan adalah sebagai berikut:
<XMLToJSON name='XMLToJSON-4'>
  <Options>
    <OutputPrefix>{ "result": </OutputPrefix>
    <OutputSuffix>}</OutputSuffix>
  </Options>
</XMLToJSON>Struktur JSON berikut dihasilkan:
{
  "result": {
    "a": "value"
  }
}Anda dapat menghilangkan salah satu atau kedua nilai OutputPrefix dan OutputSuffix.
Dengan menggunakan elemen ini, JSON yang tidak valid dapat dihasilkan. Misalnya, menggunakan konfigurasi kebijakan ini:
<XMLToJSON name='XMLToJSON-4'>
  <Options>
    <OutputPrefix>PREFIX_</OutputPrefix>
  </Options>
</XMLToJSON>Kebijakan ini menghasilkan hal berikut, yang bukan JSON yang valid:
PREFIX_{
  "a" : "value"
}Jika konfigurasi tidak menentukan OutputPrefix maupun OutputSuffix,
    kebijakan akan menghasilkan struktur JSON berikut:
{
  "a": "value"
}| Default | Lihat contoh di atas. | 
|---|---|
| Kehadiran | Opsional | 
| Jenis | String | 
Elemen <StripLevels>
<Options>
    <StripLevels>4</StripLevels>
</Options>Terkadang payload XML, seperti SOAP, memiliki banyak tingkat induk yang tidak ingin Anda sertakan dalam JSON yang dikonversi. Berikut adalah contoh respons SOAP yang berisi banyak tingkat:
<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>
Ada 4 level sebelum Anda mencapai level Negara Bagian, Kota, Deskripsi, dan Suhu.
  Tanpa menggunakan <StripLevels>, respons JSON yang dikonversi akan terlihat seperti
  ini:
{
   "Envelope" : {
      "Body" : {
         "GetCityWeatherByZIPResponse" : {
            "GetCityWeatherByZIPResult" : {
               "State" : "CO",
               "City" : "Denver",
               "Description" : "Sunny",
               "Temperature" : "62"
            }
         }
      }
   }
}Jika Anda ingin menghapus 4 tingkat pertama dalam respons JSON, Anda akan menetapkan
  <StripLevels>4</StripLevels>, yang akan memberi Anda JSON berikut:
{
  "State" : "CO",
  "City" : "Denver",
  "Description" : "Sunny",
  "Temperature" : "62"
}Anda dapat menghapus level hingga elemen pertama yang berisi beberapa turunan. Apa artinya? Mari kita lihat contoh JSON yang lebih kompleks:
{
   "Envelope" : {
      "Body" : {
         "GetCityForecastByZIPResponse" : {
            "GetCityForecastByZIPResult" : {
               "ResponseText" : "City Found",
               "ForecastResult" : {
                  "Forecast" : [
                     {
                        "ProbabilityOfPrecipiation" : {
                           "Nighttime" : "00",
                           "Daytime" : 10
                        }  ...Level 3 dalam contoh ini adalah GetCityForecastByZIPResponse, yang hanya memiliki satu
  turunan. Jadi, jika Anda menggunakan <StripLevels>3</StripLevels> (menghapus
  tiga tingkat pertama), JSON akan terlihat seperti ini:
{
   "GetCityForecastByZIPResult" : {
      "ResponseText" : "City Found",
      "ForecastResult" : {
         "Forecast" : [
            {
               "ProbabilityOfPrecipiation" : {
                  "Nighttime" : "00",
                  "Daytime" : 10
               }  ...Perhatikan bahwa GetCityForecastByZIPResult memiliki beberapa turunan. Karena merupakan
  elemen pertama yang berisi beberapa turunan, Anda dapat menghapus tingkat terakhir ini menggunakan
  <StripLevels>4</StripLevels>, yang akan memberi Anda JSON berikut:
{
   "ResponseText" : "City Found",
   "ForecastResult" : {
      "Forecast" : [
         {
            "ProbabilityOfPrecipiation" : {
               "Nighttime" : "00",
               "Daytime" : 10
            }  ...Karena level 4 adalah level pertama yang berisi beberapa turunan, Anda tidak dapat menghapus level yang lebih rendah dari level ini. Jika Anda menyetel tingkat strip ke 5, 6, 7, dan seterusnya, Anda akan terus mendapatkan respons di atas.
| Default | 0 (tidak ada penghapusan tingkat) | 
|---|---|
| Kehadiran | Opsional | 
| Jenis | Bilangan bulat | 
Elemen <TreatAsArray>/<Path>
<Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>Kombinasi elemen ini memungkinkan Anda memastikan bahwa nilai dari dokumen XML selalu diterjemahkan
    ke array JSON. Hal ini dapat berguna saat jumlah elemen turunan bervariasi untuk berbagai payload. Perilaku default Apigee adalah mengonversi beberapa elemen turunan dengan nama yang sama menjadi
    array JSON dan elemen turunan tunggal menjadi primitif JSON. Opsi TreatAsArray 
    memungkinkan Anda memastikan bahwa elemen turunan selalu diterjemahkan ke array JSON.
Menggunakan TreatAsArray dapat meningkatkan struktur kode berikutnya yang menangani output, karena data dari array ditampilkan dengan cara yang sama setiap saat. Misalnya,
  mengevaluasi JSONPath $.teachers.teacher.studentnames.name[0] akan menampilkan
  nilai nama depan secara konsisten, baik XML asli berisi satu, atau lebih dari satu,
  elemen name.
Mari kita kembali ke langkah sebelumnya dan melihat perilaku default XML ke JSON, lalu pelajari cara
  mengontrol output menggunakan <TreatAsArray>/<Path>.
Jika dokumen XML berisi elemen dengan beberapa kemunculan (yang dapat terjadi saat
    skema XML menentukan maxOccurs='unbounded' untuk elemen), kebijakan XML ke JSON
    akan otomatis menempatkan nilai tersebut dalam array. Misalnya, blok XML berikut
<teacher>
    <name>teacherA</name>
    <studentnames>
        <name>student1</name>
        <name>student2</name>
    </studentnames>
</teacher>...dikonversi menjadi JSON berikut secara otomatis tanpa konfigurasi kebijakan khusus:
{
  "teachers" : {
    "teacher" : {
      "name" : "teacherA",
      "studentnames" : {
        "name" : [
          "student1",
          "student2"
        ]
      }
    }
  }
}Perhatikan bahwa kedua nama siswa tersebut ada dalam array.
Namun, jika hanya satu siswa yang muncul dalam dokumen XML, kebijakan XML ke JSON akan otomatis memperlakukan nilai sebagai satu string, bukan array string, seperti yang ditunjukkan dalam contoh berikut:
{
  "teachers" : {
    "teacher" : {
      "name" : "teacherA",
      "studentnames" : {
        "name" : "student1"
      }
    }
  }
}Pada contoh sebelumnya, data serupa dikonversi secara berbeda, sekali ke array, dan sekali lagi ke
  string tunggal. Elemen <TreatAsArray>/<Path> memungkinkan
  Anda mengontrol output untuk memastikan bahwa nama siswa selalu dikonversi menjadi
  array meskipun hanya ada satu nilai. Anda mengonfigurasi ini dengan mengidentifikasi Jalur ke elemen yang nilainya ingin Anda konversi menjadi array, seperti berikut:
<Options>
    <TreatAsArray>
        <Path>teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>Konfigurasi di atas akan menghasilkan JSON seperti ini:
{
  "teachers" : {
    "teacher" : {
      "name" : "teacherA",
      "studentnames" : {
        "name" : ["student1"]
      }
    }
  }
}Perhatikan bahwa student1 sekarang berada dalam array. Sekarang, terlepas dari apakah ada satu atau beberapa
  siswa, Anda dapat mengambilnya dari array JSON dalam kode menggunakan JSONPath berikut:
  $.teachers.teacher.studentnames.name[0]
Elemen <Path> juga memiliki atribut unwrap, yang dijelaskan di
  bagian berikutnya.
| Default | T/A | 
|---|---|
| Kehadiran | Opsional | 
| Jenis | String | 
Atribut
 <Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>| Atribut | Deskripsi | Kehadiran | Jenis | 
|---|---|---|---|
| membuka | 
           Default: false Menghapus elemen dari output JSON. Gunakan ini untuk menyederhanakan atau meratakan ("membuka")
          JSON, yang juga memperpendek JSONPath yang diperlukan untuk mengambil nilai. Misalnya,
          daripada  Berikut contoh JSON: {
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : [
                 "student1",
                 "student2"
              ]}...Dalam contoh ini, Anda dapat berpendapat bahwa elemen  <TreatAsArray>
    <Path unwrap="true">teachers/teacher</Path>
    <Path unwrap="true">teachers/teacher/studentnames/name</Path>
</TreatAsArray>Atribut  {
  "teachers" : [{
      "name" : "teacherA",
      "studentnames" : ["student1","student2"]
      }]...Perhatikan bahwa karena elemen   | 
        Opsional | Boolean | 
Untuk contoh lainnya dan panduan fitur, lihat artikel Komunitas Google Cloud ini..
<Format>
Format memberi Anda kontrol atas konversi dari XML ke JSON. Masukkan nama template
  standar yang berisi kombinasi elemen Opsi tertentu yang dijelaskan dalam topik ini.
  Format standar mencakup: xml.com, yahoo, google,
  badgerFish.
Gunakan elemen <Format> atau grup <Options>. Anda tidak dapat menggunakan
  <Format> dan <Options> secara bersamaan.
Berikut adalah definisi Format setiap template standar.
xml.com
<RecognizeNull>true</RecognizeNull> <TextNodeName>#text</TextNodeName> <AttributePrefix>@</AttributePrefix>
yahoo
<RecognizeNumber>true</RecognizeNumber> <TextNodeName>content</TextNodeName>
<TextNodeName>$t</TextNodeName> <NamespaceSeparator>$</NamespaceSeparator> <TextAlwaysAsProperty>true</TextAlwaysAsProperty>
badgerFish
<TextNodeName>$</TextNodeName> <TextAlwaysAsProperty>true</TextAlwaysAsProperty> <AttributePrefix>@</AttributePrefix> <NamespaceSeparator>:</NamespaceSeparator> <NamespaceBlockName>@xmlns</NamespaceBlockName> <DefaultNamespaceNodeName>$</DefaultNamespaceNodeName>
Sintaksis elemen:
<Format>yahoo</Format>
| Default | (tidak ada) | 
|---|---|
| Nilai valid | Salah satu dari berikut:xml.com, yahoo, google, badgerFish | 
    
| Kehadiran | Opsional, tetapi Wajib jika <Options> tidak digunakan. | 
    
| Jenis | String | 
Skema
Referensi error
Bagian ini menjelaskan kode error dan pesan error yang ditampilkan serta variabel error yang ditetapkan oleh Apigee saat kebijakan ini memicu error. Informasi ini penting untuk diketahui jika Anda mengembangkan aturan error untuk menangani error. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani error.
Error runtime
Error ini dapat terjadi saat kebijakan dijalankan.
| Kode kerusakan | Status HTTP | Penyebab | Perbaiki | 
|---|---|---|---|
steps.xmltojson.ExecutionFailed | 
        ExecutionFailed | 
        Error ini terjadi jika payload input (XML) kosong atau XML input tidak valid atau salah format. | build | 
steps.xmltojson.InCompatibleTypes | 
        ExecutionFailed | 
        Error ini terjadi jika jenis variabel yang ditentukan dalam elemen <Source> dan elemen <OutputVariable> tidak sama. Jenis variabel yang
            terdapat dalam elemen <Source> dan elemen <OutputVariable> harus cocok.
         | 
        build | 
steps.xmltojson.InvalidSourceType | 
        ExecutionFailed | 
        Error ini terjadi jika jenis variabel yang digunakan untuk menentukan elemen <Source> tidak valid.Jenis variabel yang valid adalah pesan dan string. | 
        build | 
steps.xmltojson.OutputVariableIsNotAvailable | 
        ExecutionFailed | 
        Error ini terjadi jika variabel yang ditentukan dalam elemen <Source> kebijakan XML ke JSON berjenis string dan elemen <OutputVariable> tidak ditentukan.
          Elemen <OutputVariable> bersifat wajib jika variabel yang ditentukan dalam elemen <Source>
          berjenis string. | 
        build | 
steps.xmltojson.SourceUnavailable | 
        ExecutionFailed | 
        
          Error ini terjadi jika variabel message
          yang ditentukan dalam elemen <Source> kebijakan XML ke JSON adalah:
            
  | 
        build | 
Error saat deployment
Error ini dapat terjadi saat Anda men-deploy proxy yang berisi kebijakan ini.
| Nama error | Penyebab | Perbaiki | 
|---|---|---|
EitherOptionOrFormat | 
        
          Jika salah satu elemen <Options> atau <Format> tidak dideklarasikan dalam Kebijakan XML ke JSON, deployment proxy API akan gagal.
         | 
        build | 
UnknownFormat | 
        
          Jika elemen <Format> dalam kebijakan XML ke JSON memiliki format yang tidak diketahui, deployment proxy API akan gagal. Format standar mencakup:
          xml.com, yahoo, google, dan badgerFish.
         | 
        build | 
Variabel error
Variabel ini ditetapkan saat error runtime terjadi. Untuk mengetahui informasi selengkapnya, lihat Yang perlu Anda ketahui tentang error kebijakan.
| Variabel | Dari mana | Contoh | 
|---|---|---|
fault.name="fault_name" | 
        fault_name adalah nama error, seperti yang tercantum dalam tabel Runtime errors di atas. Nama error adalah bagian terakhir dari kode error. | fault.name = "SourceUnavailable" | 
      
xmltojson.policy_name.failed | 
        policy_name adalah nama kebijakan yang ditentukan pengguna yang menampilkan error. | xmltojson.XMLtoJSON-1.failed = true | 
      
Contoh respons error
{ "fault": { "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available", "detail": { "errorcode": "steps.xml2json.SourceUnavailable" } } }
Contoh aturan error
<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>
Topik terkait
JSON ke XML: kebijakan JSONtoXML