خط‌مشی XMLtoJSON

درحال مشاهده اسناد Apigee Edge هستید.
به اسناد Apigee X بروید.
اطلاعات

چه

این خط‌مشی پیام‌ها را از قالب زبان نشانه‌گذاری توسعه‌پذیر (XML) به قالب «نشان‌گذاری شیء جاوا اسکریپت» (JSON) تبدیل می‌کند و چندین گزینه برای کنترل نحوه تبدیل پیام‌ها دراختیارتان قرار می‌دهد.

با فرض اینکه هدف تبدیل پاسخ با قالب XML به پاسخ با قالب JSON باشد، خط‌مشی به «جریان» پاسخ پیوست می‌شود (برای مثال، «پاسخ / نقطه پایانی پراکسی / جریان پس‌از ارسال»).

درباره

در سناریو میانجی‌گری معمول، خط‌مشی JSON به XML در جریان درخواست ورودی اغلب با خط‌مشی XML به JSON در جریان پاسخ خروجی جفت می‌شود. با ترکیب کردن خط‌مشی‌ها به این روش، یک «میانای برنامه‌سازی کاربردی» JSON می‌تواند برای سرویس‌های زیرین که به‌طور بومی فقط از XML پشتیبانی می‌کنند نمایان شود.

برای سناریوهایی که در آن‌ها برنامه‌های کارخواه متنوعی از میاناهای برنامه‌سازی کاربردی استفاده می‌کنند و ممکن است به JSON یا XML نیاز داشته باشند، قالب پاسخ را می‌توان با پیکربندی خط‌مشی‌های تبدیل JSON به XML و XML به JSON به‌صورت پویا تنظیم کرد تا به‌صورت شرطی اجرا شوند. برای اجرای این سناریو، متغیرها و شرایط جریان را ببینید.


نمونه‌ها

برای بحث مفصل درباره تبدیل بین JSON و XML، به تبدیل بین XML و JSON با Apigee: آنچه باید بدانید مراجعه کنید.

درحال تبدیل پاسخ

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

این پیکربندی—که حداقل پیکربندی لازم برای تبدیل XML به JSON است—پیام پاسخ با قالب XML را به‌عنوان منبع می‌گیرد و سپس پیامی با قالب JSON ایجاد می‌کند که در response OutputVariable تکمیل می‌شود. ‫Edge به‌طور خودکار از محتوای این متغیر به‌عنوان پیام برای مرحله پردازش بعدی استفاده می‌کند.


مرجع عنصر

در زیر، عناصر و مشخصه‌هایی را که می‌توانید در این خط‌مشی پیکربندی کنید مشاهده می‌کنید.

<XMLToJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">
    <DisplayName>XML to JSON 1</DisplayName>
    <Source>response</Source>
    <OutputVariable>response</OutputVariable>
    <Options>
        <RecognizeNumber>true</RecognizeNumber>
        <RecognizeBoolean>true</RecognizeBoolean>
        <RecognizeNull>true</RecognizeNull>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName>
        <NamespaceSeparator>***</NamespaceSeparator>
        <TextAlwaysAsProperty>true</TextAlwaysAsProperty>
        <TextNodeName>TEXT</TextNodeName>
        <AttributeBlockName>FOO_BLOCK</AttributeBlockName>
        <AttributePrefix>BAR_</AttributePrefix>
        <OutputPrefix>PREFIX_</OutputPrefix>
        <OutputSuffix>_SUFFIX</OutputSuffix>
        <StripLevels>2</StripLevels>
        <TreatAsArray>
            <Path unwrap="true">teachers/teacher/studentnames/name</Path>
        </TreatAsArray>
    </Options>
    <!-- Use Options or Format, not both -->
    <Format>yahoo</Format>
</XMLToJSON>

مشخصه‌های <XMLtoJSON>

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

جدول زیر ویژگی هایی را توصیف می کند که برای همه عناصر اصلی خط مشی مشترک هستند:

صفت توضیحات پیش فرض حضور
name

نام داخلی سیاست. مقدار مشخصه name می تواند شامل حروف، اعداد، فاصله، خط تیره، زیرخط و نقطه باشد. این مقدار نمی تواند بیش از 255 کاراکتر باشد.

در صورت تمایل، از عنصر <DisplayName> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

عنصر <Source>

متغیر، درخواست، یا پاسخی که حاوی پیام XML است و می‌خواهید آن را به JSON تبدیل کنید.

سرایند «نوع محتوای» HTTP پیام منبع باید روی application/xml تنظیم شود، درغیراین‌صورت خط‌مشی اجرا نمی‌شود.

اگر <Source> تعریف نشده باشد، به‌عنوان پیام درنظر گرفته می‌شود (که وقتی خط‌مشی به جریان درخواست پیوست می‌شود به درخواست، یا وقتی خط‌مشی به جریان پاسخ پیوست می‌شود به پاسخ تبدیل می‌شود).

اگر متغیر منبع قابل‌حل نباشد یا به نوع غیرپیام حل شود، خط‌مشی خطا می‌دهد.

<Source>response</Source>
پیش‌فرض درخواست یا پاسخ، که براساس محل اضافه شدن خط‌مشی به جریان پراکسی API تعیین می‌شود
حضور اختیاری
تایپ کردن پیام

عنصر <OutputVariable>

برونداد تبدیل قالب XML به JSON را ذخیره می‌کند. این مقدار معمولاً همان مقدار منبع است، یعنی معمولاً پاسخ XML به پاسخ JSON تبدیل می‌شود.

پایه‌بار پیام XML تجزیه و به JSON تبدیل می‌شود، و سرایند HTTP Content-type پیام با قالب XML روی application/json تنظیم می‌شود.

اگر OutputVariable مشخص نشده باشد، source به‌عنوان OutputVariable درنظر گرفته می‌شود. برای مثال، اگر source برابر با response باشد، آنگاه OutputVariable به‌طور پیش‌فرض روی response تنظیم می‌شود.

<OutputVariable>response</OutputVariable>
پیش‌فرض درخواست یا پاسخ، که براساس محل اضافه شدن خط‌مشی به جریان پراکسی API تعیین می‌شود
حضور وقتی متغیر تعریف‌شده در عنصر <Source> از نوع رشته باشد، این عنصر الزامی است.
تایپ کردن پیام

<Options>

گزینه‌ها به شما امکان می‌دهند تبدیل از XML به JSON را کنترل کنید. از گروه <Options> استفاده کنید که به شما امکان می‌دهد تنظیمات تبدیل خاصی را اضافه کنید، یا از عنصر <Format> استفاده کنید که به شما امکان می‌دهد به الگویی از گزینه‌های پیش‌تعریف‌شده ارجاع دهید. نمی‌توانید هم از <Options> و هم از <Format> استفاده کنید.

اگر از <Format> استفاده نمی‌شود، <Options> الزامی است.

عنصر <Options>/<RecognizeNumber>

اگر درست باشد، فیلدهای عددی در بار XML قالب اصلی خود را حفظ می‌کنند.

<RecognizeNumber>true</RecognizeNumber>

مثال XML زیر را درنظر بگیرید:

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

اگر true، به این تبدیل می‌شود:

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

اگر false، به این تبدیل می‌شود:

{
    "a": {
        "b": "100",
        "c": "value"
    }
}
پیش‌فرض نادرست
حضور اختیاری
تایپ کردن بولی

عنصر <Options>/<RecognizeBoolean>

به تبدیل اجازه می‌دهد مقادیر درست/نادرست بولی را حفظ کند و مقادیر را به رشته تبدیل نکند.

<RecognizeBoolean>true</RecognizeBoolean>

برای مثال XML زیر:

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

اگر true، به این تبدیل می‌شود:

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

اگر false، به این تبدیل می‌شود:

{
    "a": {
        "b": "true",
        "c": "value"
    }
}
پیش‌فرض نادرست
حضور اختیاری
تایپ کردن بولی

عنصر <Options>/<RecognizeNull>

به شما امکان می‌دهد مقادیر خالی را به مقادیر تهی تبدیل کنید.

<RecognizeNull>true</RecognizeNull>

برای زبان نشانه‌گذاری توسعه‌پذیر زیر:

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

اگر true، به این تبدیل می‌شود:

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

اگر false، به این تبدیل می‌شود:

{
  "a": {
    "b": {},
    "c": "value"
  }
}
پیش‌فرض نادرست
حضور اختیاری
تایپ کردن بولی

عنصر <Options>/<NullValue>

مقدار تبدیل مقادیر تهی تشخیص‌داده‌شده در پیام منبع را نشان می‌دهد. به‌طور پیش‌فرض، مقدار null است. این گزینه فقط درصورتی مؤثر است که RecognizeNull درست باشد.

<NullValue>not-present</NullValue>

پیش‌فرض null
حضور اختیاری
تایپ کردن رشته

عناصر <Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator>

از این عناصر باهم استفاده کنید.

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

مثال XML زیر را درنظر بگیرید:

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

اگر NamespaceSeparator مشخص نشده باشد، ساختار JSON زیر تولید می‌شود:

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

اگر عناصر NamespaceBlockName، DefaultNamespaceNodeName، و NamespaceSeparator به‌ترتیب به‌عنوان #namespaces، &، و *** مشخص شده باشند، ساختار JSON زیر تولید می‌شود:

{
    "a": {
        "#namespaces": {
            "&": "http://ns.com",
            "ns1": "http://ns1.com"
        },
        "ns1***b": "value"
    }
}
پیش‌فرض مثال‌های بالا را ببینید.
حضور اختیاری
بااین‌حال، اگر <NamespaceBlockName> را مشخص کنید، باید دو عنصر دیگر را نیز مشخص کنید.
تایپ کردن رشته‌ها

عناصر <Options>/<TextAlwaysAsProperty>
<Options>/<TextNodeName>

از این عناصر باهم استفاده کنید.

اگر روی true تنظیم شود، محتوای عنصر XML به دارایی رشته‌ای تبدیل می‌شود.

<TextAlwaysAsProperty>true</TextAlwaysAsProperty>
<TextNodeName>TEXT</TextNodeName>

برای زبان نشانه‌گذاری توسعه‌پذیر زیر:

<a>
  <b>value1</b>
  <c>value2<d>value3</d>value4</c>
</a>

اگر TextAlwaysAsProperty روی true تنظیم شده باشد و TextNodeName به‌صورت TEXT مشخص شده باشد، ساختار JSON زیر تولید می‌شود:

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

اگر TextAlwaysAsProperty روی false تنظیم شده باشد و TextNodeName به‌عنوان TEXT مشخص شده باشد، ساختار JSON زیر تولید می‌شود:

{
  "a": {
    "b": "value1",
    "c": {
      "TEXT": [
        "value2",
        "value4"
      ],
      {
        "d": "value3",
      }
    }
}
پیش‌فرض <TextAlwaysAsProperty>: false
<TextNodeName>: N/A
حضور اختیاری
تایپ کردن ‫<TextAlwaysAsProperty>: بولی
<TextNodeName>: رشته

<Options>/<AttributeBlockName>
<Options>/<AttributePrefix> عناصر

از این عناصر باهم استفاده کنید.

به شما امکان می‌دهد مقادیر را در یک بلوک JSON گروه‌بندی کنید و پیشوندها را به نام‌های مشخصه اضافه کنید.

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

مثال XML زیر را درنظر بگیرید:

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

اگر هر دو مشخصه (AttributeBlockName و AttributePrefix) همان‌گونه که در مثال XML به JSON تعریف شده است مشخص شده باشند، ساختار JSON زیر تولید می‌شود:

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

اگر فقط AttributeBlockName مشخص شده باشد، ساختار JSON زیر تولید می‌شود:

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

اگر فقط AttributePrefix مشخص شده باشد، ساختار JSON زیر تولید می‌شود:

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

اگر هیچ‌کدام مشخص نشده باشد، ساختار JSON زیر تولید می‌شود:

{
    "a": {
        "attrib1": "value1",
        "attrib2": "value2"
    }
}
پیش‌فرض مثال‌های بالا را ببینید.
حضور اختیاری
تایپ کردن رشته

عناصر <Options>/<OutputPrefix>
<Options>/<OutputSuffix>

از این عناصر باهم استفاده کنید.

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

مثال XML زیر را درنظر بگیرید:

<a>value</a>

اگر هر دو مشخصه (OutputPrefix و OutputSuffix) همان‌گونه که در مثال XML به JSON تعریف شده است مشخص شده باشند، ساختار JSON زیر تولید می‌شود:

PREFIX_{
    "a": "value"
}_SUFFIX

اگر فقط OutputPrefix مشخص شده باشد، ساختار JSON زیر تولید می‌شود:

PREFIX_{
  "a" : "value"
}

اگر فقط OutputSuffix مشخص شده باشد، ساختار JSON زیر تولید می‌شود:

{
  "a" : "value"
}_SUFFIX

اگر نه OutputPrefix و نه OutputSuffix مشخص نشده باشد، ساختار JSON زیر تولید می‌شود:

{
    "a": "value"
}
پیش‌فرض نمونه‌های بالا را ببینید.
حضور اختیاری
تایپ کردن رشته

عنصر <Options>/<StripLevels>

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

گاهی اوقات بار داده‌های XML، مانند SOAP، دارای سطوح والد زیادی هستند که نمی‌خواهید در JSON تبدیل‌شده بگنجانید. در اینجا نمونه‌ای از پاسخ SOAP حاوی سطوح زیاد آورده شده است:

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

قبل‌از رسیدن به سطح «ایالت»، «شهر»، «شرح»، و «دما»، ۴ سطح وجود دارد. بدون استفاده از <StripLevels>، پاسخ تبدیل‌شده JSON به این شکل خواهد بود: این:

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

اگر می‌خواهید آن ۴ سطح اول را در پاسخ JSON حذف کنید، <StripLevels>4</StripLevels> را تنظیم می‌کنید که JSON زیر را به شما می‌دهد: JSON:

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

می‌توانید سطوح را تا اولین عنصری که حاوی چندین فرزند است حذف کنید. معنی آن چیست؟ بیایید به یک نمونه JSON پیچیده‌تر نگاه کنیم:

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

سطح ۳ در این مثال GetCityForecastByZIPResponse است که فقط یک فرزند دارد. بنابراین اگر بخواهید از <StripLevels>3</StripLevels> (برداشتن سه سطح اول) استفاده کنید، JSON به این شکل خواهد بود:

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

توجه داشته باشید که GetCityForecastByZIPResult چند فرزند دارد. ازآنجایی‌که این اولین عنصر حاوی چند فرزند است، می‌توانید این سطح آخر را بااستفاده از <StripLevels>4</StripLevels> حذف کنید که JSON زیر را به شما می‌دهد:

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

ازآنجایی‌که سطح ۴ اولین سطحی است که شامل چند کودک می‌شود، نمی‌توانید هیچ سطحی را پایین‌تر از این حذف کنید. اگر سطح نوار را روی ۵، ۶، ۷، و غیره تنظیم کنید، همچنان پاسخ بالا را دریافت خواهید کرد.

پیش‌فرض ‫۰ (بدون حذف سطح)
حضور اختیاری
تایپ کردن عدد صحیح

عنصر <Options>/<TreatAsArray>/<Path>

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

این ترکیب عنصر به شما امکان می‌دهد مطمئن شوید که مقادیر از سند XML در آرایه JSON قرار می‌گیرند. این کار زمانی مفید است که برای مثال، تعداد عناصر فرزند می‌تواند متغیر باشد (از یک تا چندین)، و می‌خواهید مطمئن شوید مقادیر همیشه در آرایه باشند. انجام این کار به پایدار نگه داشتن کد شما کمک می‌کند، زیرا هر بار می‌توانید داده‌ها را به یک روش از آرایه دریافت کنید. برای مثال: $.teachers.teacher.studentnames[0] اولین مقدار نام محصل را در آرایه صرف‌نظر از تعداد مقادیر در آرایه دریافت می‌کند.

بیایید یک قدم به عقب برگردیم و به رفتار پیش‌فرض XML به JSON نگاه کنیم، سپس بررسی کنیم که چگونه بااستفاده از <TreatAsArray>/<Path> خروجی را کنترل کنیم.

وقتی سند XML عنصری با چندین مقدار فرزند داشته باشد (معمولاً براساس طرحواره‌ای که عنصر maxOccurs='unbounded')، خط‌مشی XML به JSON به‌طور خودکار آن مقادیر را در آرایه قرار می‌دهد. برای مثال، بلوک XML زیر

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

…بدون پیکربندی خط‌مشی ویژه، به‌طور خودکار به JSON زیر تبدیل می‌شود:

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

توجه داشته باشید که دو نام محصل در آرایه قرار می‌گیرد.

بااین‌حال، اگر فقط یک محصل در سند XML ظاهر شود، خط‌مشی تبدیل XML به JSON به‌طور خودکار مقدار را به‌عنوان یک رشته واحد درنظر می‌گیرد، نه آرایه‌ای از رشته‌ها، همان‌طور که در مثال زیر نشان داده شده است:

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

در مثال‌های قبلی، داده‌های مشابه به روش‌های مختلفی تبدیل شده‌اند، یک‌بار به‌عنوان آرایه و بار دیگر به‌عنوان رشته‌ای واحد. در اینجا عنصر <TreatAsArray>/<Path> به شما امکان می‌دهد برونداد را کنترل کنید. برای مثال، می‌توانید مطمئن شوید که نام‌های دانش‌آموزان همیشه در آرایه قرار می‌گیرند، حتی اگر فقط یک مقدار وجود داشته باشد. این را با شناسایی «مسیر» عنصر که می‌خواهید مقادیر آن را در آرایه قرار دهید پیکربندی می‌کنید، مانند این:

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

پیکربندی بالا JSON را به‌این‌صورت می‌نویسد:

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

توجه کنید که student1 اکنون در آرایه است. اکنون، صرف‌نظر از اینکه یک یا چند محصل وجود دارد، می‌توانید آن‌ها را بااستفاده از JSONPath زیر از آرایه JSON در کدتان بازیابی کنید: $.teachers.teacher.studentnames.name[0]

عنصر <Path> همچنین دارای مشخصه unwrap است که در بخش بعدی توضیح داده شده است.

پیش‌فرض NA
حضور اختیاری
تایپ کردن رشته

مشخصه‌ها

 <Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>
مشخصه شرح حضور نوع
باز کردن

پیش‌فرض: نادرست

عنصر را از برونداد JSON برمی‌دارد. از این برای ساده‌سازی یا مسطح کردن ("باز کردن") JSON استفاده کنید، که همچنین JSONPath موردنیاز برای بازیابی مقادیر را کوتاه می‌کند. برای مثال، به‌جای $.teachers.teacher.studentnames.name[*]، می‌توانید ‫JSON را مسطح کنید و از $.teachers.studentnames[*] استفاده کنید.

در اینجا نمونه‌ای از JSON آورده شده است:

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

در این مثال، می‌توانید استدلال کنید که عنصر teacher و عنصر studentnames name غیرضروری هستند. بنابراین می‌توانید آن‌ها را بردارید یا باز کنید. نحوه پیکربندی عنصر <Path> برای انجام این کار در اینجا آمده است:

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

مشخصه unwrap روی درست تنظیم شده است و مسیرهای عناصر برای باز کردن ارائه شده است. برونداد JSON اکنون به این شکل خواهد بود:

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

توجه داشته باشید که چون عنصر <Path> در عنصر <TreatAsArray> قرار دارد، هر دو عنصر در «مسیر» در برونداد JSON به‌عنوان آرایه درنظر گرفته می‌شوند.

اختیاری بولی

برای نمونه‌های بیشتر و آشنایی با ویژگی، این مقاله «انجمن Apigee» را ببینید: آموزش انجمن: گزینه TreatAsArray در خط‌مشی تبدیل XML به JSON.

<Format>

قالب به شما امکان می‌دهد تبدیل از XML به JSON را کنترل کنید. نام الگوی ازپیش‌تعریف‌شده‌ای را وارد کنید که حاوی ترکیب خاصی از عناصر «گزینه‌ها» باشد که در این موضوع شرح داده شده است. قالب‌های ازپیش تعریف‌شده شامل این موارد است: xml.com، yahoo، google، badgerFish.

از عنصر <Format> یا گروه <Options> استفاده کنید. نمی‌توانید از هم <Format> و هم <Options> استفاده کنید.

در زیر، تعاریف «قالب» هریک از الگوهای ازپیش تعریف‌شده آمده است.

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>

نحو عنصر:

<Format>yahoo</Format>
پیش‌فرض نام یکی از قالب‌های دردسترس را وارد کنید:
xml.com، yahoo، google، badgerFish
حضور اگر از <Options> استفاده نمی‌شود، الزامی است.
تایپ کردن رشته

طرح‌واره‌ها


مرجع خطا

این بخش کدهای خطا و پیام‌های خطایی را که برگردانده می‌شوند و متغیرهای خطایی را که Edge هنگام راه‌اندازی خطا در این خط‌مشی تنظیم می‌کند شرح می‌دهد. این اطلاعات برای دانستن اینکه آیا قوانین خطا را برای مدیریت خطاها توسعه می‌دهید یا نه مهم است. برای کسب اطلاعات بیشتر، آنچه باید درباره خطاهای خط‌مشی بدانیدو رسیدگی به اشکالات را ببینید.

خطاهای زمان اجرا

این خطاها ممکن است هنگام اجرای خط‌مشی رخ دهند.

کد خطا وضعیت HTTP علت رفع اشکال
steps.xmltojson.ExecutionFailed ۵۰۰ این خطا زمانی رخ می‌دهد که بار ورودی (XML) خالی باشد یا XML ورودی نامعتبر یا بدشکل باشد.
steps.xmltojson.InCompatibleType ۵۰۰ این خطا زمانی رخ می‌دهد که نوع متغیر تعریف‌شده در عنصر <Source> و عنصر <OutputVariable> یکسان نباشد. الزامی است که نوع متغیرهای موجود در عنصر <Source> و عنصر <OutputVariable> مطابقت داشته باشد.
steps.xmltojson.InvalidSourceType ۵۰۰ این خطا زمانی رخ می‌دهد که نوع متغیر استفاده‌شده برای تعریف عنصر <Source> نامعتبر باشد.انواع معتبر متغیر عبارت‌اند از پیام و رشته.
steps.xmltojson.OutputVariableIsNotAvailable ۵۰۰ این خطا زمانی رخ می‌دهد که متغیر مشخص‌شده در عنصر <Source> از XML به خط‌مشی JSON از نوع رشته باشد و عنصر <OutputVariable> تعریف نشده باشد. وقتی متغیر تعریف‌شده در عنصر <Source> از نوع رشته باشد، عنصر <OutputVariable> اجباری است.
steps.xmltojson.SourceUnavailable ۵۰۰ این خطا زمانی رخ می‌دهد که متغیر پیام مشخص‌شده در عنصر <Source> خط‌مشی XML به JSON یکی از موارد زیر باشد:
  • خارج از محدوده (در جریان خاصی که خط‌مشی در آن اجرا می‌شود دردسترس نیست) یا
  • قابل‌حل نیست (تعریف نشده است)

خطاهای استقرار

این خطاها ممکن است زمانی رخ دهند که یک پراکسی حاوی این خط‌مشی را مستقر می‌کنید.

نام خطا علت رفع اشکال
EitherOptionOrFormat اگر یکی از عناصر <Options> یا <Format> در «خط‌مشی XML به JSON» اعلام نشده باشد، استقرار پراکسی API ناموفق خواهد بود.
UnknownFormat اگر عنصر <Format> در خط‌مشی XML به JSON قالب ناشناخته‌ای داشته باشد، استقرار پراکسی API ناموفق خواهد بود. قالب‌های ازپیش تعریف‌شده شامل: xml.com، yahoo، google، و badgerFish می‌شود.

متغیرهای خطا

این متغیرها زمانی تنظیم می‌شوند که خطای زمان اجرا رخ دهد. برای اطلاعات بیشتر، آنچه باید درباره خطاهای خط‌مشی بدانیدرا ببینید.

متغیر مکان مثال
fault.name="fault_name" ‫fault_name نام خطا است، همان‌طور که در جدول خطاهای زمان اجرا در بالا فهرست شده است. نام خطا آخرین بخش کد خطا است. fault.name = "SourceUnavailable"
xmltojson.policy_name.failed ‫policy_name نام مشخص‌شده کاربر برای خط‌مشی‌ای است که خطا را ایجاد کرده است. xmltojson.XMLtoJSON-1.failed = true

نمونه پاسخ خطا

{
  "fault": {
    "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available",
    "detail": {
      "errorcode": "steps.xml2json.SourceUnavailable"
    }
  }
}

قانون خطای نمونه

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

موضوعات مرتبط

‫JSON به XML: خط‌مشی JSON به XML