XMLtoJSON নীতি

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান
তথ্য

কি

এই নীতিটি এক্সটেনসিবল মার্কআপ ল্যাঙ্গুয়েজ (XML) ফর্ম্যাট থেকে জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (JSON) তে বার্তাগুলিকে রূপান্তর করে, বার্তাগুলি কীভাবে রূপান্তরিত হয় তা নিয়ন্ত্রণ করার জন্য আপনাকে বেশ কয়েকটি বিকল্প দেয়৷

একটি XML-ফরম্যাটেড প্রতিক্রিয়াকে JSON-ফরম্যাটেড প্রতিক্রিয়াতে রূপান্তর করার উদ্দেশ্য হল অনুমান করে, নীতিটি একটি প্রতিক্রিয়া প্রবাহের সাথে সংযুক্ত করা হবে (উদাহরণস্বরূপ, প্রতিক্রিয়া / প্রক্সিএন্ডপয়েন্ট / পোস্টফ্লো)।

সম্পর্কে

একটি সাধারণ মধ্যস্থতা পরিস্থিতিতে, অন্তর্মুখী অনুরোধ প্রবাহের উপর একটি JSON থেকে XML নীতি প্রায়শই আউটবাউন্ড প্রতিক্রিয়া প্রবাহে একটি XML থেকে JSON নীতির সাথে যুক্ত হয়। এইভাবে নীতিগুলি একত্রিত করে, একটি JSON API ব্যাকএন্ড পরিষেবাগুলির জন্য উন্মুক্ত করা যেতে পারে যা স্থানীয়ভাবে শুধুমাত্র XML সমর্থন করে৷

এমন পরিস্থিতিতে যেখানে APIগুলি বিভিন্ন ক্লায়েন্ট অ্যাপের দ্বারা ব্যবহার করা হয় যার জন্য 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-ফরম্যাটেড বার্তা তৈরি করে যা 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>

<XMLtoJSON> বৈশিষ্ট্য

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

নিম্নলিখিত সারণী সমস্ত নীতির মূল উপাদানগুলির জন্য সাধারণ বৈশিষ্ট্যগুলি বর্ণনা করে:

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
name

নীতির অভ্যন্তরীণ নাম। name বৈশিষ্ট্যের মানটিতে অক্ষর, সংখ্যা, স্পেস, হাইফেন, আন্ডারস্কোর এবং পিরিয়ড থাকতে পারে। এই মান 255 অক্ষরের বেশি হতে পারে না।

ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে <DisplayName> উপাদানটি ব্যবহার করুন।

N/A প্রয়োজন
continueOnError

একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে false সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ।

একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে true সেট করুন৷

মিথ্যা ঐচ্ছিক
enabled

নীতি প্রয়োগ করতে true সেট করুন৷

নীতি বন্ধ করতে false সেট করুন। নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না।

সত্য ঐচ্ছিক
async

এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷

মিথ্যা অবচয়

<DisplayName> উপাদান

ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।

<DisplayName>Policy Display Name</DisplayName>
ডিফল্ট

N/A

আপনি এই উপাদানটি বাদ দিলে, নীতির name বৈশিষ্ট্যের মান ব্যবহার করা হবে।

উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

<উৎস> উপাদান

পরিবর্তনশীল, অনুরোধ বা প্রতিক্রিয়া, যেটিতে XML বার্তা রয়েছে যা আপনি JSON-এ রূপান্তর করতে চান৷

উৎস বার্তার HTTP বিষয়বস্তু-টাইপ শিরোনাম অবশ্যই application/xml এ সেট করতে হবে, অন্যথায় নীতি প্রয়োগ করা হবে না।

যদি <Source> সংজ্ঞায়িত না করা হয়, তাহলে এটিকে বার্তা হিসাবে গণ্য করা হয় (যা নীতিটি অনুরোধের প্রবাহের সাথে সংযুক্ত হলে অনুরোধের সমাধান করে, অথবা যখন নীতিটি একটি প্রতিক্রিয়া প্রবাহের সাথে সংযুক্ত থাকে তখন প্রতিক্রিয়া)।

যদি সোর্স ভেরিয়েবলের সমাধান না করা যায়, বা একটি নন-মেসেজ টাইপের সমাধান করা যায়, তাহলে নীতি একটি ত্রুটি ছুড়ে দেয়।

<Source>response</Source>
ডিফল্ট অনুরোধ বা প্রতিক্রিয়া, যেখানে নীতিটি API প্রক্সি ফ্লোতে যোগ করা হয়েছে তার দ্বারা নির্ধারিত হয়
উপস্থিতি ঐচ্ছিক
টাইপ বার্তা

<আউটপুট ভেরিয়েবল> উপাদান

XML-এর আউটপুট JSON ফর্ম্যাট রূপান্তর সংরক্ষণ করে। এটি সাধারণত উত্স হিসাবে একই মান, অর্থাৎ, সাধারণত XML প্রতিক্রিয়া একটি JSON প্রতিক্রিয়াতে রূপান্তরিত হয়।

XML বার্তার পেলোড পার্স করা হয় এবং JSON-এ রূপান্তরিত হয়, এবং XML- ফর্ম্যাট করা বার্তার HTTP বিষয়বস্তু-টাইপ শিরোনাম application/json এ সেট করা হয়।

যদি OutputVariable নির্দিষ্ট করা না থাকে, তাহলে source OutputVariable হিসাবে গণ্য করা হয়। উদাহরণস্বরূপ, যদি source response হয়, তাহলে OutputVariable response ডিফল্ট হয়।

<OutputVariable>response</OutputVariable>
ডিফল্ট অনুরোধ বা প্রতিক্রিয়া, যেখানে নীতিটি API প্রক্সি ফ্লোতে যোগ করা হয়েছে তার দ্বারা নির্ধারিত হয়
উপস্থিতি এই উপাদানটি বাধ্যতামূলক যখন <Source> এলিমেন্টে সংজ্ঞায়িত ভেরিয়েবল টাইপ স্ট্রিং হয়।
টাইপ বার্তা

<বিকল্প>

বিকল্পগুলি আপনাকে XML থেকে JSON-এ রূপান্তরের উপর নিয়ন্ত্রণ দেয়। হয় <Options> গোষ্ঠী ব্যবহার করুন, যা আপনাকে নির্দিষ্ট রূপান্তর সেটিংস যোগ করতে দেয়, অথবা <Format> উপাদান, যা আপনাকে পূর্বনির্ধারিত বিকল্পগুলির একটি টেমপ্লেট উল্লেখ করতে দেয়। আপনি <Options> এবং <Format> উভয়ই ব্যবহার করতে পারবেন না।

যদি <Format> ব্যবহার না করা হয় তাহলে <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"
    }
}
ডিফল্ট মিথ্যা
উপস্থিতি ঐচ্ছিক
টাইপ বুলিয়ান

<বিকল্প>/<RecognizeBoolan> উপাদান

মানগুলিকে স্ট্রিংয়ে পরিণত করার পরিবর্তে রূপান্তরটিকে বুলিয়ান সত্য/মিথ্যা মান বজায় রাখতে দেয়।

<RecognizeBoolean>true</RecognizeBoolean>

নিম্নলিখিত XML উদাহরণের জন্য:

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

true হলে, এতে রূপান্তরিত হয়:

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

false হলে, এতে রূপান্তরিত হয়:

{
    "a": {
        "b": "true",
        "c": "value"
    }
}
ডিফল্ট মিথ্যা
উপস্থিতি ঐচ্ছিক
টাইপ বুলিয়ান

<বিকল্প>/<RecognizeNull> উপাদান

আপনাকে খালি মানগুলিকে শূন্য মানগুলিতে রূপান্তর করতে দেয়।

<RecognizeNull>true</RecognizeNull>

নিম্নলিখিত XML এর জন্য:

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

true হলে, এতে রূপান্তরিত হয়:

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

false হলে, এতে রূপান্তরিত হয়:

{
  "a": {
    "b": {},
    "c": "value"
  }
}
ডিফল্ট মিথ্যা
উপস্থিতি ঐচ্ছিক
টাইপ বুলিয়ান

<বিকল্প>/<NullValue> উপাদান

উৎস বার্তার স্বীকৃত শূন্য মানগুলিকে যে মানে রূপান্তর করা উচিত তা নির্দেশ করে৷ ডিফল্টরূপে মানটি nullRecognizeNull সত্য হলেই এই বিকল্পটি কার্যকর।

<NullValue>not-present</NullValue>

ডিফল্ট null
উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

<বিকল্প>/<NamespaceBlockName>
<বিকল্প>/<DefaultNamespaceNodeName>
<বিকল্প>/<নেমস্পেস বিভাজক> উপাদান

একসাথে এই উপাদান ব্যবহার করুন.

<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> উল্লেখ করেন, তাহলে আপনাকে অবশ্যই অন্য দুটি উপাদানও উল্লেখ করতে হবে।
টাইপ স্ট্রিংস

<বিকল্প>/<TextAlwaysAsProperty>
<বিকল্প>/<TextNodeName> উপাদান

একসাথে এই উপাদান ব্যবহার করুন.

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> : N/A
উপস্থিতি ঐচ্ছিক
টাইপ <TextAlwaysAsProperty> : বুলিয়ান
<TextNodeName> : স্ট্রিং

<বিকল্প>/<AttributeBlockName>
<বিকল্প>/<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"
    }
}
ডিফল্ট উপরে উদাহরণ দেখুন.
উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

<বিকল্প>/<আউটপুট প্রিফিক্স>
<বিকল্প>/<আউটপুট সাফিক্স> উপাদান

একসাথে এই উপাদান ব্যবহার করুন.

<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>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 প্রতিক্রিয়ায় সেই প্রথম 4টি স্তর বাদ দিতে চান, তাহলে আপনি <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 (কোন লেভেল স্ট্রিপিং নেই)
উপস্থিতি ঐচ্ছিক
টাইপ পূর্ণসংখ্যা

<বিকল্প>/<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 বৈশিষ্ট্য রয়েছে, যা পরবর্তী বিভাগে ব্যাখ্যা করা হয়েছে।

ডিফল্ট এন.এ
উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

গুণাবলী

 <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 উপাদান এবং ছাত্রদের 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

<ফর্ম্যাট>

ফর্ম্যাট আপনাকে XML থেকে JSON-এ রূপান্তরের উপর নিয়ন্ত্রণ দেয়। একটি পূর্বনির্ধারিত টেমপ্লেটের নাম লিখুন যাতে এই বিষয়ে বর্ণিত বিকল্প উপাদানগুলির একটি নির্দিষ্ট সংমিশ্রণ রয়েছে। পূর্বনির্ধারিত বিন্যাসগুলির মধ্যে রয়েছে: xml.com , yahoo , google , badgerFish .

হয় <Format> উপাদান বা <Options> গ্রুপ ব্যবহার করুন। আপনি <Format> এবং <Options> উভয়ই ব্যবহার করতে পারবেন না।

নিম্নলিখিত প্রতিটি পূর্বনির্ধারিত টেমপ্লেট বিন্যাস সংজ্ঞা আছে.

xml.com

<RecognizeNull>true</RecognizeNull>
<TextNodeName>#text</TextNodeName>
<AttributePrefix>@</AttributePrefix>

ইয়াহু

<RecognizeNumber>true</RecognizeNumber>
<TextNodeName>content</TextNodeName>

গুগল

<TextNodeName>$t</TextNodeName>
<NamespaceSeparator>$</NamespaceSeparator>
<TextAlwaysAsProperty>true</TextAlwaysAsProperty>

ব্যাজার ফিশ

<TextNodeName>$</TextNodeName>
<TextAlwaysAsProperty>true</TextAlwaysAsProperty>
<AttributePrefix>@</AttributePrefix>
<NamespaceSeparator>:</NamespaceSeparator>
<NamespaceBlockName>@xmlns</NamespaceBlockName>
<DefaultNamespaceNodeName>$</DefaultNamespaceNodeName>

উপাদান সিনট্যাক্স:

<Format>yahoo</Format>
ডিফল্ট একটি উপলব্ধ বিন্যাসের নাম লিখুন:
xml.com , yahoo , google , badgerFish
উপস্থিতি <Options> ব্যবহার করা না হলে প্রয়োজন।
টাইপ স্ট্রিং

স্কিমাস


ত্রুটি উল্লেখ

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.xmltojson.ExecutionFailed 500 This error occurs when the input payload (XML) is empty or the input XML is invalid or malformed.
steps.xmltojson.InCompatibleType 500 This error occurs if the type of the variable defined in the <Source> element and the <OutputVariable> element are not the same. It is mandatory that the type of the variables contained within the <Source> element and the <OutputVariable> element matches.
steps.xmltojson.InvalidSourceType 500 This error occurs if the type of the variable used to define the <Source> element is invalid.The valid types of variable are message and string.
steps.xmltojson.OutputVariableIsNotAvailable 500 This error occurs if the variable specified in the <Source> element of the XML to JSON policy is of type string and the <OutputVariable> element is not defined. The <OutputVariable> element is mandatory when the variable defined in the <Source> element is of type string.
steps.xmltojson.SourceUnavailable 500 This error occurs if the message variable specified in the <Source> element of the XML to JSON policy is either:
  • out of scope (not available in the specific flow where the policy is being executed) or
  • can't be resolved (is not defined)

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
EitherOptionOrFormat If one of the elements <Options> or <Format> is not declared in the XML to JSON Policy, then the deployment of the API proxy fails.
UnknownFormat If the <Format> element within the XML to JSON policy has an unknown format defined, then the deployment of the API proxy fails. Predefined formats include: xml.com, yahoo, google, and badgerFish.

Fault variables

These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name = "SourceUnavailable"
xmltojson.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. xmltojson.XMLtoJSON-1.failed = true

Example error response

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

Example fault rule

<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 নীতি