سياسة XMLtoJSON

أنت تعرض مستندات Apigee Edge.
انتقل إلى مستندات Apigee X.
معلومات

المزايا

تؤدي هذه السياسة إلى تحويل الرسائل من تنسيق لغة الترميز القابلة للامتداد (XML) إلى JavaScript. تنسيق Object Notation (JSON)، مما يمنحك العديد من الخيارات للتحكم في كيفية كتابة الرسائل تم تحويله.

مع افتراض أنّ الغرض من ذلك هو تحويل استجابة بتنسيق XML إلى تنسيق JSON سيتم إرفاق السياسة بمسار الرد (على سبيل المثال، الاستجابة / ProxyEndpoint) / PostFlow).

لمحة

في سيناريو التوسط النموذجي، غالبًا ما يتم استخدام سياسة JSON إلى XML في مسار الطلب الوارد بسياسة XML إلى JSON في مسار الاستجابة الصادرة. ومن خلال الجمع بين السياسات بهذه الطريقة، يمكن أن يتم الكشف عن واجهة برمجة تطبيقات JSON للخدمات الخلفية التي تدعم في الأصل XML فقط.

للسيناريوهات التي تستهلك فيها تطبيقات العميل المتنوّعة واجهات برمجة التطبيقات التي قد تتطلّب إما JSON أو XML، يمكن ضبط تنسيق الاستجابة ديناميكيًا من خلال ضبط JSON على XML وXML إلى JSON السياسات على التنفيذ بشروط. يُرجى الاطّلاع على متغيّرات التدفق وشروطه لتنفيذ هذا السيناريو.


نماذج

وللحصول على مناقشة تفصيلية حول التحويل بين JSON وXML، يُرجى الاطّلاع على http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html.

تحويل رد

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

هذه الإعدادات هي أقل عملية إعداد مطلوبة لتحويل ملف XML إلى JSON: يأخذ رسالة استجابة بتنسيق XML كمصدر، ثم ينشئ هذه رسالة بتنسيق JSON تتم تعبئتها في OutputVariable response. الحافة تلقائيًا محتوى هذا المتغير كرسالة لخطوة المعالجة التالية.


مرجع العنصر

في ما يلي العناصر والسمات التي يمكنك ضبطها في هذه السياسة.

<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; السمات

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

يصف الجدول التالي السمات المشتركة بين جميع العناصر الرئيسية للسياسة:

السمة الوصف تلقائي التواجد في المنزل
name

الاسم الداخلي للسياسة. يمكن لقيمة السمة name أن تحتوي على أحرف وأرقام ومسافات وواصلات وشرطات سفلية ونقاط. لا يمكن لهذه القيمة يتجاوز 255 حرفًا.

يمكنك، إذا أردت، استخدام العنصر <DisplayName> لتصنيف السياسة محرر الخادم الوكيل لواجهة مستخدم الإدارة باسم مختلف بلغة طبيعية.

لا ينطبق مطلوب
continueOnError

اضبط القيمة على false لعرض رسالة خطأ عند تعذُّر تنفيذ سياسة. هذا متوقّع السلوك في معظم السياسات.

يمكنك ضبط القيمة على true لمواصلة تنفيذ المسار حتى بعد تطبيق إحدى السياسات. فشل.

خطأ اختياري
enabled

اضبط القيمة على true لفرض السياسة.

اضبط القيمة على false من أجل إيقاف السياسة. لن تكون السياسة ويتم فرضها حتى لو ظلت مرتبطة بتدفق.

صحيح اختياري
async

تم إيقاف هذه السمة نهائيًا.

خطأ منهي العمل به

&lt;DisplayName&gt; عنصر

استخدِمه مع السمة name لتصنيف السياسة في إدارة خادم وكيل لواجهة المستخدم باسم مختلف بلغة طبيعية.

<DisplayName>Policy Display Name</DisplayName>
تلقائي

لا ينطبق

إذا لم تستخدم هذا العنصر، سيتم ضبط قيمة السمة name للسياسة على النحو التالي: استخدام البيانات المختلفة.

التواجد في المنزل اختياري
النوع سلسلة

&lt;Source&gt; عنصر

المتغيّر أو الطلب أو الاستجابة، الذي يحتوي على رسالة XML التي تريد التحويل إليها JSON.

يجب ضبط عنوان نوع محتوى HTTP للرسالة المصدر على application/xml، في حال عدم تنفيذ السياسة، لن يتم فرضها.

إذا لم يتم تحديد <Source>، سيتم التعامل مع الرسالة كرسالة (ما يتم حلها. لطلب الموافقة عندما تكون السياسة مرتبطة بمسار الطلب أو الرد عند إرفاق السياسة إلى تدفق الاستجابة).

إذا تعذّر حلّ متغيّر المصدر أو إلى نوع آخر غير الرسائل، سيتم تطبيق السياسة. إلى حدوث خطأ.

<Source>response</Source>
تلقائي الطلب أو الاستجابة، يتم تحديدهما من خلال إضافة السياسة إلى مسار الخادم الوكيل لواجهة برمجة التطبيقات
الحضور اختياري
النوع رسالة

&lt;OutputVariable&gt; عنصر

تخزين ناتج تحويل XML إلى JSON. وعادةً ما تكون هذه هي نفس قيمة المصدر، أي يتم تحويل استجابة XML عادةً إلى استجابة JSON.

يتم تحليل حمولة رسالة XML وتحويلها إلى تنسيق JSON، ونوع محتوى HTTP تم ضبط عنوان الرسالة بتنسيق XML على application/json.

إذا لم يتم تحديد OutputVariable، يتم التعامل مع source على أنّه OutputVariable على سبيل المثال، إذا كانت قيمة السمة source هي response، ثم يتم ضبط OutputVariable تلقائيًا على response.

<OutputVariable>response</OutputVariable>
تلقائي الطلب أو الاستجابة، يتم تحديدهما من خلال إضافة السياسة إلى مسار الخادم الوكيل لواجهة برمجة التطبيقات
الحضور يكون هذا العنصر إلزاميًا عندما يكون المتغيّر المحدّد في العنصر <Source> من النوع سلسلة.
النوع رسالة

&lt;Options&gt;

تمنحك الخيارات إمكانية التحكم في التحويل من XML إلى JSON. استخدم إما مجموعة <Options>، التي تسمح لك بإضافة إعدادات إحالات ناجحة محدَّدة، أو <Format>، الذي يتيح لك الإشارة إلى نموذج خيارات محددة مسبقًا. لا يمكنك استخدام كل من <Options> <Format>

يجب توفير <Options> في حال عدم استخدام <Format>.

&lt;Options&gt;/&lt;RecognizeNumber&gt; عنصر

إذا كانت القيمة true، ستحتفظ حقول الأرقام في حمولة 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"
    }
}
تلقائي خطأ
الحضور اختياري
النوع منطقي

&lt;Options&gt;/&lt;RecognizeBoolean&gt; عنصر

يسمح هذا الخيار للإحالة الناجحة بالحفاظ على قيم صحيحة/خطأ المنطقية بدلاً من تحويل القيم إلى السلاسل.

<RecognizeBoolean>true</RecognizeBoolean>

في ما يتعلّق بمثال XML التالي:

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

في حال true، سيتم التحويل إلى:

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

في حال false، سيتم التحويل إلى:

{
    "a": {
        "b": "true",
        "c": "value"
    }
}
تلقائي خطأ
الحضور اختياري
النوع منطقي

&lt;Options&gt;/&lt;RecognizeNull&gt; عنصر

تسمح لك هذه الطريقة بتحويل القيم الفارغة إلى قيم فارغة.

<RecognizeNull>true</RecognizeNull>

بالنسبة إلى ملف XML التالي:

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

في حال true، سيتم التحويل إلى:

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

في حال false، سيتم التحويل إلى:

{
  "a": {
    "b": {},
    "c": "value"
  }
}
تلقائي خطأ
الحضور اختياري
النوع منطقي

&lt;Options&gt;/&lt;NullValue&gt; عنصر

الإشارة إلى القيمة التي يجب أن تكون القيم الخالية التي تم التعرف عليها في الرسالة المصدر تم تحويله. والقيمة التلقائية هي null. هذا الخيار فعال فقط إذا كانت RecognizeNull true.

<NullValue>not-present</NullValue>

تلقائي null
الحضور اختياري
النوع سلسلة

&lt;Options&gt;/&lt;NamespaceBlockName&gt;
&lt;Options&gt;/&lt;DefaultNamespaceNodeName&gt;
&lt;Options&gt;/&lt;NamespaceSeparator&gt; العناصر

استخدام هذه العناصر معًا.

<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>، فيجب أيضًا تحديد عنصرين آخرين.
النوع السلاسل

&lt;Options&gt;/&lt;TextAlwaysAsProperty&gt;
&lt;Options&gt;/&lt;TextNodeName&gt; العناصر

استخدام هذه العناصر معًا.

إذا تم ضبط السياسة على true، سيتم تحويل محتوى عنصر XML إلى سلسلة. الموقع.

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

بالنسبة إلى ملف XML التالي:

<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>: خطأ
<TextNodeName>: لا ينطبق
الحضور اختياري
النوع <TextAlwaysAsProperty>: قيمة منطقية
<TextNodeName>: سلسلة

&lt;Options&gt;/&lt;AttributeBlockName&gt;
&lt;Options&gt;/&lt;AttributePrefix&gt; العناصر

استخدام هذه العناصر معًا.

تتيح لك هذه الميزة تجميع القيم في مجموعة 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"
    }
}
تلقائي راجِع الأمثلة أعلاه.
الحضور اختياري
النوع سلسلة

&lt;Options&gt;/&lt;OutputPrefix&gt;
&lt;Options&gt;/&lt;OutputSuffix&gt; العناصر

استخدام هذه العناصر معًا.

<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"
}
تلقائي اطّلِع على النماذج أعلاه.
الحضور اختياري
النوع سلسلة

&lt;Options&gt;/&lt;StripLevels&gt; عنصر

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

تتوفّر 4 مستويات قبل الوصول إلى مستوى الولاية والمدينة والوصف ودرجة الحرارة. بدون استخدام <StripLevels>، ستظهر استجابة JSON المحوَّلة بالشكل التالي:

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

إذا كنت تريد إزالة تلك المستويات الأربعة الأولى في استجابة JSON، فيجب <StripLevels>4</StripLevels>، الذي سيمنحك ما يلي JSON:

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

يمكنك إزالة المستويات إلى العنصر الأول الذي يحتوي على عدة عناصر فرعية. ما يفعله هذا يعني؟ لنلقِ نظرة على مثال JSON أكثر تعقيدًا:

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

المستوى 3 في هذا المثال هو 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
            }  ...

بما أنّ المستوى 4 هو المستوى الأول الذي يتضمّن عدة أطفال، لا يمكنك إزالة أي مستويات. أقل من هذا. إذا تم ضبط مستوى الشريط على 5 و6 و7 وما إلى ذلك، فستستمر في الرد أعلاه.

تلقائي 0 (بدون إزالة مستوى)
الحضور اختياري
النوع عدد صحيح

&lt;Options&gt;/&lt;TreatAsArray&gt;/&lt;Path&gt; عنصر

<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"]
              }
            ]
          }
      }
}

لاحظ أن الطالب 1 أصبح الآن في صفيف. والآن، بغض النظر عما إذا كان هناك ملف واحد أو أكثر طالب، يمكنك استردادها من مصفوفة JSON في الرمز باستخدام JSONPath التالي: $.teachers.teacher.studentnames.name[0]

العنصر <Path> يتضمّن أيضًا السمة unwrap، كما هو موضّح في القسم التالي.

تلقائي غير متاح
الحضور اختياري
النوع سلسلة

السمات

 <Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>
السمة الوصف التواجد في المنزل النوع
فتح

الإعداد التلقائي: false

لإزالة العنصر من ناتج JSON. استخدم هذا لتبسيط أو تسطيح ("إلغاء الالتفاف") JSON، الذي يعمل أيضًا على اختصار JSONPath المطلوب لاسترداد القيم. على سبيل المثال: بدلاً من $.teachers.teacher.studentnames.name[*]، يمكنك تسوية JSON واستخدِم $.teachers.studentnames[*].

في ما يلي مثال على JSON:

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

في هذا المثال، يمكنك القول إن العنصر teacher عنصر 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 هذه: https://community.apigee.com/content/kbentry/33374/new-edge-minifeature-the-treatasarray-option-in-th.html.

&lt;Format&gt;

يمنحك التنسيق إمكانية التحكم في التحويل من 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 500 يحدث هذا الخطأ عندما تكون حمولة البيانات المُدخلة (XML) فارغة أو عندما يكون تنسيق XML الذي تم إدخاله غير صالح أو مكتوبًا بشكلٍ غير صحيح.
steps.xmltojson.InCompatibleType 500 يحدث هذا الخطأ إذا كان نوع المتغيّر المحدَّد في العنصر <Source> العنصر <OutputVariable> ليس هو نفسه. يجب أن يكون نوع المتغيرات التي يتم تضمينها في العنصر <Source> وتتطابق العنصر <OutputVariable>.
steps.xmltojson.InvalidSourceType 500 يحدث هذا الخطأ إذا كان نوع المتغيّر المستخدَم لتعريف عنصر <Source> هو غير صالح.أنواع المتغير الصالحة هي الرسالة والسلسلة.
steps.xmltojson.OutputVariableIsNotAvailable 500 يحدث هذا الخطأ إذا كان المتغير المحدّد في العنصر <Source> في ملف XML إنّ سياسة JSON من النوع سلسلة ولم يتم تحديد العنصر <OutputVariable>. يكون العنصر <OutputVariable> إلزاميًا إذا تم تحديد المتغيّر في <Source>. العنصر من نوع السلسلة.
steps.xmltojson.SourceUnavailable 500 يحدث هذا الخطأ إذا كانت الرسالة يكون المتغيّر المحدَّد في العنصر <Source> ضمن سياسة XML إلى JSON إما:
  • خارج النطاق (لا تتوفّر خلال المسار المحدّد الذي يتم فيه تنفيذ السياسة)
  • يتعذّر حلها (غير محدّد)

أخطاء النشر

يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يحتوي على هذه السياسة.

اسم الخطأ السبب إصلاح
EitherOptionOrFormat إذا لم يكن أحد العنصرين <Options> أو <Format> المحددة في XML إلى سياسة JSON، فسيفشل نشر الخادم الوكيل لواجهة برمجة التطبيقات.
UnknownFormat إذا كان العنصر <Format> في سياسة XML إلى JSON يتضمّن قيمة غير معروفة المحدد، فسيفشل نشر الخادم الوكيل لواجهة برمجة التطبيقات. تتضمن التنسيقات المحددة مسبقًا ما يلي: "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 السياسة