Kebijakan XMLtoJSON

Halaman ini berlaku untuk Apigee dan Apigee hybrid.

Lihat dokumentasi Apigee Edge.

ikon kebijakan

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 kebijakan dan ketersediaan dengan setiap jenis lingkungan, lihat Jenis kebijakan.

Tentang

Dalam skenario mediasi standar, kebijakan JSON ke XML pada alur permintaan masuk sering kali dipasangkan dengan kebijakan XML ke JSON pada alur respons keluar. Dengan menggabungkan kebijakan dengan cara ini, JSON API dapat diekspos untuk layanan backend yang secara native hanya mendukung XML.

Untuk skenario saat API digunakan oleh berbagai aplikasi klien yang mungkin memerlukan JSON atau XML, format respons dapat ditetapkan secara dinamis dengan mengonfigurasi kebijakan JSON ke XML dan XML ke JSON untuk dieksekusi secara kondisional. Lihat Variabel dan kondisi alur untuk penerapan skenario ini.


Sampel

Untuk diskusi mendetail tentang cara mengonversi 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 menjadi 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 name dapat berisi huruf, angka, spasi, tanda hubung, garis bawah, dan titik. Nilai ini tidak boleh melebihi 255 karakter.

Secara opsional, gunakan elemen <DisplayName> untuk memberi label pada kebijakan di editor proxy UI pengelolaan dengan nama bahasa alami yang berbeda.

T/A Wajib
continueOnError

Tetapkan ke false untuk menampilkan error saat kebijakan gagal. Perilaku ini wajar terjadi untuk sebagian besar kebijakan.

Tetapkan ke true agar eksekusi alur berlanjut meskipun setelah kebijakan gagal. Lihat juga:

false Opsional
enabled

Tetapkan ke true untuk menerapkan kebijakan.

Tetapkan ke false untuk menonaktifkan kebijakan. Kebijakan tidak akan diterapkan meskipun tetap terlampir ke alur.

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 name kebijakan akan digunakan.

Kehadiran Opsional
Jenis String

Elemen <Source>

Variabel yang menentukan pesan XML yang ingin Anda konversi ke JSON.

Header Jenis konten HTTP dari pesan sumber harus ditetapkan ke application/xml. Jika tidak, kebijakan tidak akan diterapkan.

Jika tidak ditentukan, <Source> akan diperlakukan sebagai message, yang me-resolve ke request saat kebijakan dilampirkan ke alur permintaan, atau response saat kebijakan dilampirkan ke alur respons.

Jika variabel sumber tidak dapat di-resolve, atau di-resolve 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 mengurai 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, OutputVariable akan ditetapkan secara default ke response.

<OutputVariable>response</OutputVariable>
Default pesan yang ditentukan di 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 standar. Anda tidak dapat menggunakan <Options> dan <Format>.

<Options> diperlukan jika <Format> tidak digunakan.

Elemen <RecognizeNumber>

Jika benar, 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 dikonversi ke nilai null yang dikenali dalam pesan sumber. Secara default, nilainya adalah null. Opsi ini hanya berlaku jika RecognizeNull bernilai 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 akan 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 namespaces dalam dokumen XML harus diterjemahkan ke dalam JSON yang dihasilkan, gunakan elemen ini secara bersamaan.

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

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

Jika elemen NamespaceBlockName, DefaultNamespaceNodeName, dan NamespaceSeparator masing-masing ditentukan sebagai #namespaces, &, dan ***, 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 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 akan menerjemahkan konten teks elemen XML tersebut menjadi properti dalam hash JSON.

Saat kebijakan menemukan elemen XML yang berisi beberapa turunan konten campuran, opsi ini memungkinkan Anda mengontrol JSON output dari node teks turunan.

Misalnya, pertimbangkan konfigurasi kebijakan ini:

<XMLToJSON name='XMLToJSON-1'>
  <Options>
    <TextAlwaysAsProperty>???</TextAlwaysAsProperty>
    <TextNodeName>#text</TextNodeName>
  </Options>
</XMLToJSON>

Untuk input XML yang diberikan, kebijakan akan menghasilkan output ini, 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

Elemen ini, bersama-sama, 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 dihasilkan:

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

Jika hanya AttributeBlockName yang ditentukan, struktur JSON berikut akan dihasilkan:

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

Jika hanya AttributePrefix yang ditentukan, struktur JSON berikut akan dihasilkan:

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

Jika tidak ada yang ditentukan, struktur JSON berikut akan dihasilkan:

{
    "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 kebijakannya adalah sebagai berikut:

<XMLToJSON name='XMLToJSON-4'>
  <Options>
    <OutputPrefix>{ "result": </OutputPrefix>
    <OutputSuffix>}</OutputSuffix>
  </Options>
</XMLToJSON>

Struktur JSON berikut akan dihasilkan:

{
  "result": {
    "a": "value"
  }
}

Anda dapat menghilangkan salah satu atau kedua OutputPrefix dan OutputSuffix.

Dengan menggunakan elemen ini, Anda dapat membuat JSON yang tidak valid. 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 atau 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 level:

<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 tingkat sebelum Anda mencapai tingkat 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 ingin menghapus 4 level pertama tersebut dalam respons JSON, Anda harus 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 maksudnya? 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 level pertama), JSON akan terlihat seperti ini:

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

Perhatikan bahwa GetCityForecastByZIPResult memiliki beberapa turunan. Karena ini adalah 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 ini. Jika menetapkan level 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 jika jumlah elemen turunan bervariasi untuk payload yang berbeda. Perilaku default Apigee adalah mengonversi beberapa elemen turunan dengan nama yang sama ke array JSON dan elemen turunan tunggal ke primitif JSON. Opsi TreatAsArray memungkinkan Anda memastikan bahwa elemen turunan selalu diterjemahkan ke array JSON.

Penggunaan 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 mundur sejenak dan melihat perilaku default XML ke JSON, lalu mempelajari 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>

...akan otomatis dikonversi menjadi JSON berikut tanpa konfigurasi kebijakan khusus:

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

Perhatikan bahwa kedua nama siswa tersebut terdapat 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 satu string. Elemen <TreatAsArray>/<Path> memungkinkan Anda mengontrol output untuk memastikan bahwa nama siswa selalu dikonversi menjadi array meskipun hanya ada satu nilai. Anda mengonfigurasinya dengan mengidentifikasi Jalur ke elemen yang nilainya ingin Anda konversi menjadi array, seperti ini:

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

Default: false

Menghapus elemen dari output JSON. Gunakan ini untuk menyederhanakan atau meratakan ("membuka") JSON, yang juga mempersingkat JSONPath yang diperlukan untuk mengambil nilai. Misalnya, sebagai ganti $.teachers.teacher.studentnames.name[*], Anda dapat meratakan JSON dan menggunakan $.teachers.studentnames[*].

Berikut adalah contoh JSON:

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

Dalam contoh ini, Anda dapat berpendapat bahwa elemen teacher dan elemen name namasiswa tidak diperlukan. Jadi, Anda dapat menghapus, atau membuka paketnya. Berikut cara mengonfigurasi elemen <Path> untuk melakukannya:

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

Atribut unwrap ditetapkan ke true, dan jalur ke elemen yang akan di-unzip disediakan. Output JSON sekarang akan terlihat seperti ini:

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

Perhatikan bahwa karena elemen <Path> berada dalam elemen <TreatAsArray>, kedua elemen dalam Jalur akan diperlakukan sebagai array dalam output JSON.

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 tertentu dari elemen Opsi 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>.

Berikut adalah definisi Format dari setiap template standar.

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>

Sintaksis elemen:

<Format>yahoo</Format>
Default (tidak ada)
Nilai valid Salah satu dari hal 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 dieksekusi.

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.
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.
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.
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.
steps.xmltojson.SourceUnavailable ExecutionFailed Error ini terjadi jika variabel message yang ditentukan dalam elemen <Source> kebijakan XML ke JSON adalah:
  • Di luar cakupan (tidak tersedia dalam alur tertentu tempat kebijakan dijalankan) atau
  • Tidak dapat diselesaikan (tidak ditentukan)

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

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