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) menjadi JavaScript Object Notation (JSON), yang memberi Anda beberapa opsi untuk mengontrol cara pesan dikonversi.

Dengan asumsi bahwa intent adalah untuk mengonversi respons berformat XML menjadi respons berformat JSON kebijakan tersebut akan dilampirkan ke Alur respons (misalnya, Respons / ProxyEndpoint / PostFlow).

Kebijakan ini merupakan Kebijakan standar dan dapat di-deploy ke jenis lingkungan apa pun. Tidak semua perlu diketahui pengguna tentang jenis kebijakan dan lingkungan. Sebagai informasi tentang jenis kebijakan dan ketersediaan untuk setiap jenis lingkungan, lihat Jenis kebijakan.

Tentang

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

Untuk skenario ketika API digunakan oleh beragam aplikasi klien yang mungkin memerlukan JSON atau XML, format respons dapat disetel secara dinamis dengan mengonfigurasi JSON ke XML dan XML ke JSON kebijakan yang dijalankan secara bersyarat. Lihat Variabel dan kondisi flow untuk penerapan skenario ini.


Sampel

Untuk diskusi 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 dalam OutputVariable response. Apigee secara otomatis menggunakan isi variabel ini sebagai pesan untuk langkah pemrosesan berikutnya.


Referensi elemen

Berikut adalah elemen dan atribut yang dapat Anda konfigurasi di 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>

&lt;XMLtoJSON&gt; atribut

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

Tabel berikut menjelaskan atribut yang sama 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.

Atau, gunakan elemen <DisplayName> untuk memberi label kebijakan di editor proxy UI pengelolaan dengan nama natural-language yang berbeda.

T/A Diperlukan
continueOnError

Setel ke false untuk menampilkan error jika kebijakan gagal. Ini adalah perilaku yang wajar untuk sebagian besar kebijakan.

Setel ke true agar eksekusi alur tetap berlanjut bahkan setelah kebijakan gagal. Lihat juga:

false Opsional
enabled

Setel ke true untuk menerapkan kebijakan.

Setel ke false untuk menonaktifkan kebijakan. Kebijakan tidak akan diterapkan meskipun tetap melekat pada alur.

true Opsional
async

Atribut ini sudah tidak digunakan lagi.

false Tidak digunakan lagi

Elemen <DisplayName>

Gunakan selain atribut name untuk memberi label kebijakan di editor proxy UI pengelolaan dengan nama natural-language 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

&lt;Source&gt; elemen

Variabel yang menentukan pesan XML yang ingin Anda konversi JSON.

Header jenis Konten HTTP pesan sumber harus ditetapkan ke application/xml, jika tidak, kebijakan ini tidak akan diterapkan.

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

Jika variabel sumber tidak dapat di-resolve, atau di-resolve menjadi jenis bukan pesan, kebijakan tersebut menampilkan error.

<Source>response</Source>
Default Nilai elemen Source
Kehadiran Opsional
Jenis Pesan

&lt;OutputVariable&gt; elemen

Menentukan tempat untuk menyimpan output konversi format XML ke JSON. Biasanya, proses ini tidak disertakan dalam konfigurasi kebijakan.

Apigee mengurai payload pesan XML yang ditentukan di Source, melakukan konversi ke JSON, menyimpan hasilnya ke dalam payload OutputVariable, dan menyetel permintaan HTTP Header jenis konten dari pesan OutputVariable untuk application/json.

Jika OutputVariable tidak ditentukan, nilai Source akan digunakan secara {i>default<i}. Misalnya, jika source adalah response, lalu OutputVariable secara default menjadi response.

<OutputVariable>response</OutputVariable>
Default pesan yang ditentukan dalam Source
Kehadiran Opsional
Jenis Pesan

&lt;Options&gt;

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

<Options> diperlukan jika <Format> tidak digunakan.

&lt;RecognizeNumber&gt; elemen

Jika true (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 salah
Kehadiran Opsional
Jenis Boolean

&lt;RecognizeBoolean&gt; elemen

Memungkinkan konversi mempertahankan nilai boolean/salah (true) daripada mengubahnya menjadi {i>string<i}.

<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 salah
Kehadiran Opsional
Jenis Boolean

&lt;RecognizeNull&gt; elemen

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 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 salah
Kehadiran Opsional
Jenis Boolean

&lt;NullValue&gt; elemen

Menunjukkan nilai yang harus dikaitkan dengan nilai null yang dikenali dalam pesan sumber dikonversi. Secara default, nilainya adalah null. Opsi ini hanya berlaku jika RecognizeNull benar.

<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 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 ditetapkan sebagai #namespaces, &, dan ***, masing-masing, struktur JSON berikut akan dibuat:

{
    "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 pesan sumber yang dirujuk ke namespace.
Kehadiran Opsional
Namun, jika menentukan <NamespaceBlockName>, Anda juga harus menentukan dua elemen lainnya.
Jenis String

Opsi teks

Gunakan elemen-elemen ini bersama-sama.

      <TextAlwaysAsProperty>true|false</TextAlwaysAsProperty>
      <TextNodeName>TEXT</TextNodeName>

Ketika kebijakan menemukan elemen XML yang hanya berisi satu {i>node<i} teks sebagai turunan, kebijakan akan menerjemahkan konten teks elemen XML tersebut ke properti di hash JSON.

Ketika kebijakan bertemu dengan elemen XML yang berisi beberapa turunan dari konten campuran, opsi ini memungkinkan Anda mengontrol JSON output dari setiap 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
jika TextAlwaysAsProperty adalah false jika 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>: salah
<TextNodeName>: (string kosong)
Kehadiran Opsional
Jenis <TextAlwaysAsProperty>: Boolean
<TextNodeName>: String

Opsi atribut

Dengan elemen-elemen tersebut, Anda dapat 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) ditetapkan seperti yang didefinisikan 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 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 keduanya tidak ditentukan, struktur JSON berikut akan dibuat:

{
    "a": {
        "attrib1": "value1",
        "attrib2": "value2"
    }
}
Default tidak ada.
Kehadiran Opsional
Jenis String

&lt;OutputPrefix&gt; dan <OutputSuffix> elemen

Gunakan elemen tersebut secara bersamaan 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 akan dibuat:

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

Anda dapat menghilangkan salah satu atau keduanya dari OutputPrefix dan OutputSuffix.

Dengan menggunakan elemen ini, Anda dapat menghasilkan JSON yang tidak valid. Misalnya, dengan menggunakan konfigurasi kebijakan:

<XMLToJSON name='XMLToJSON-4'>
  <Options>
    <OutputPrefix>PREFIX_</OutputPrefix>
  </Options>
</XMLToJSON>

Kebijakan ini menghasilkan hal berikut, yang bukan merupakan JSON yang valid:

PREFIX_{
  "a" : "value"
}

Jika konfigurasi tidak menentukan OutputPrefix atau OutputSuffix, kebijakan tersebut akan menghasilkan struktur JSON berikut:

{
  "a": "value"
}
Default Lihat contoh di atas.
Kehadiran Opsional
Jenis String

&lt;StripLevels&gt; elemen

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

Terkadang payload XML, seperti SOAP, memiliki banyak level induk yang tidak ingin Anda sertakan dalam JSON yang dikonversi. Berikut adalah contoh respons SOAP yang berisi berbagai tingkatan:

<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 Anda ingin menghapus 4 tingkat pertama tersebut dalam respons JSON, Anda perlu <StripLevels>4</StripLevels>, yang akan memberi Anda info berikut JSON:

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

Anda dapat menghilangkan level hingga elemen pertama yang berisi beberapa turunan. Fungsi 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 anak. Jadi, jika Anda menggunakan <StripLevels>3</StripLevels> (hapus 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 ini adalah elemen pertama yang berisi beberapa turunan, Anda dapat membongkar level terakhir ini menggunakan <StripLevels>4</StripLevels>, yang akan memberi Anda JSON:

{
   "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 mana pun lebih rendah dari ini. Jika Anda mengatur tingkat strip ke 5, 6, 7, dan seterusnya, Anda akan terus mendapatkan respons di atas.

Default 0 (tanpa penurunan level)
Kehadiran Opsional
Jenis Bilangan bulat

&lt;TreatAsArray&gt;/&lt;Path&gt; elemen

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

Kombinasi elemen ini memungkinkan Anda memastikan bahwa nilai-nilai dari dokumen XML selalu diterjemahkan ke array JSON. Hal ini dapat berguna ketika jumlah elemen turunan bervariasi untuk payload. Perilaku default Apigee adalah mengonversi beberapa elemen turunan dengan nama yang sama menjadi Array JSON dan elemen turunan tunggal ke primitif JSON. Opsi TreatAsArray memungkinkan Anda memastikan bahwa elemen turunan selalu diterjemahkan ke array JSON.

Menggunakan TreatAsArray dapat meningkatkan struktur kode berikutnya yang menangani {i>output<i}, karena data dari {i>array<i} ditampilkan dengan cara yang sama setiap saat. Misalnya, mengevaluasi JSONPath dari $.teachers.teacher.studentnames.name[0] akan mengembalikan nama depan secara konsisten, apakah XML asli berisi satu, atau lebih dari satu, elemen name.

Mari kita mundur selangkah dan melihat perilaku default XML ke JSON, lalu jelajahi cara mengontrol output menggunakan <TreatAsArray>/<Path>.

Ketika dokumen XML berisi elemen dengan beberapa kejadian (yang bisa terjadi ketika Skema XML menentukan maxOccurs='unbounded' untuk elemen), kebijakan XML ke JSON secara otomatis menempatkan nilai-nilai tersebut dalam sebuah {i>array<i}. Misalnya, blok XML berikut

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

...dikonversi ke JSON berikut secara otomatis tanpa kebijakan khusus konfigurasi:

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

Perhatikan bahwa kedua nama siswa berada di array.

Namun, jika hanya satu siswa yang muncul dalam dokumen XML, kebijakan XML ke JSON akan otomatis memperlakukan nilai sebagai string tunggal, bukan array string, seperti yang ditunjukkan dalam contoh:

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

Dalam contoh sebelumnya, data yang serupa dikonversi secara berbeda, sekali ke sebuah {i>array<i}, dan sekali lagi ke dalam satu {i>string<i}. Elemen <TreatAsArray>/<Path> memungkinkan Anda mengontrol {i>output<i} untuk memastikan bahwa nama siswa selalu dikonversi menjadi sebuah {i>array<i} meskipun hanya ada satu nilai. Anda mengonfigurasi ini dengan mengidentifikasi Jalur ke 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 sekarang berada di array. Kini, terlepas dari apakah ada satu atau beberapa Anda, Anda dapat mengambilnya dari array JSON dalam kode Anda 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
buka

Default: false

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

Berikut adalah contoh JSON:

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

Dalam contoh ini, Anda dapat berpendapat bahwa elemen teacher dan Studentnames name tidak diperlukan. Jadi Anda bisa menghapus, atau membuka mereka. Berikut adalah 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 benar (true), dan jalur ke elemen yang akan {i>unwrap<i} 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 di Jalur akan menjadi diperlakukan sebagai array dalam output JSON.

Opsional Boolean

Untuk contoh dan panduan fitur lainnya, lihat artikel Komunitas Google Cloud ini..

&lt;Format&gt;

Format memberi Anda kontrol atas konversi dari XML ke JSON. Masukkan nama {i>template<i} 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 yang telah ditentukan sebelumnya.

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 opsi berikut:
xml.com, yahoo, google, badgerFish
Kehadiran Opsional, tetapi Wajib jika <Options> tidak digunakan.
Jenis String

Skema


Referensi error

Bagian ini menjelaskan kode kesalahan dan pesan error yang ditampilkan dan variabel kesalahan yang disetel oleh Apigee saat kebijakan ini memicu error. Informasi ini penting untuk diketahui apakah Anda mengembangkan aturan kesalahan untuk menangani kesalahan. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani kesalahan.

Error runtime

Error ini dapat terjadi saat kebijakan dieksekusi.

Kode kesalahan Status HTTP Penyebab Perbaikan
steps.xmltojson.ExecutionFailed ExecutionFailed Error ini terjadi jika payload input (XML) kosong atau XML input tidak valid atau formatnya salah.
steps.xmltojson.InCompatibleTypes ExecutionFailed Error ini terjadi jika jenis variabel yang ditentukan dalam elemen <Source> dan elemen <OutputVariable> tidak sama. Jenis variabel yang ada dalam elemen <Source> dan elemen <OutputVariable> harus cocok.
steps.xmltojson.InvalidSourceType ExecutionFailed Error ini terjadi jika jenis variabel yang digunakan untuk menetapkan 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 adalah string jenis dan elemen <OutputVariable> tidak ditentukan. Elemen <OutputVariable> bersifat wajib jika variabel yang ditentukan dalam elemen <Source> adalah string jenis.
steps.xmltojson.SourceUnavailable ExecutionFailed Error ini terjadi jika variabel message yang ditentukan dalam elemen <Source> dari kebijakan XML ke JSON adalah:
  • Di luar cakupan (tidak tersedia dalam alur spesifik 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 Perbaikan
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 yang telah ditentukan sebelumnya meliputi: xml.com, yahoo, google, dan badgerFish.

Variabel kesalahan

Variabel ini ditetapkan saat terjadi error runtime. Untuk informasi selengkapnya, lihat Yang perlu Anda ketahui tentang error kebijakan.

Variabel Dari mana Contoh
fault.name="fault_name" fault_name adalah nama kesalahan, seperti yang tercantum dalam tabel Error runtime di atas. Nama kesalahan adalah bagian terakhir dari kode kesalahan. fault.name = "SourceUnavailable"
xmltojson.policy_name.failed policy_name adalah nama kebijakan yang ditentukan pengguna yang menampilkan kesalahan. 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 kesalahan

<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