আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান । তথ্য
কি
এই নীতিটি এক্সটেনসিবল মার্কআপ ল্যাঙ্গুয়েজ (XML) ফর্ম্যাট থেকে বার্তাগুলিকে জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (JSON) এ রূপান্তর করে, যা আপনাকে বার্তাগুলি কীভাবে রূপান্তরিত হয় তা নিয়ন্ত্রণ করার জন্য বেশ কয়েকটি বিকল্প দেয়।
ধরে নিচ্ছি যে উদ্দেশ্য হল একটি XML-ফরম্যাটেড রেসপন্সকে JSON-ফরম্যাটেড রেসপন্সে রূপান্তর করা, নীতিটি একটি রেসপন্স ফ্লোর সাথে সংযুক্ত করা হবে (উদাহরণস্বরূপ, রেসপন্স / প্রক্সিএন্ডপয়েন্ট / পোস্টফ্লো)।
সম্পর্কে
একটি সাধারণ মধ্যস্থতার পরিস্থিতিতে, ইনবাউন্ড রিকোয়েস্ট ফ্লো-তে একটি JSON থেকে XML নীতি প্রায়শই আউটবাউন্ড রেসপন্স ফ্লো-তে একটি XML থেকে JSON নীতির সাথে যুক্ত করা হয়। এইভাবে নীতিগুলিকে একত্রিত করে, একটি JSON API ব্যাকএন্ড পরিষেবাগুলির জন্য উন্মুক্ত করা যেতে পারে যা স্থানীয়ভাবে শুধুমাত্র XML সমর্থন করে।
যেসব পরিস্থিতিতে API গুলি বিভিন্ন ক্লায়েন্ট অ্যাপ দ্বারা ব্যবহৃত হয় যার জন্য JSON বা XML প্রয়োজন হতে পারে, সেখানে শর্তসাপেক্ষে কার্যকর করার জন্য JSON থেকে XML এবং XML থেকে JSON নীতিগুলি কনফিগার করে প্রতিক্রিয়া বিন্যাস গতিশীলভাবে সেট করা যেতে পারে। এই পরিস্থিতির বাস্তবায়নের জন্য ফ্লো ভেরিয়েবল এবং শর্তাবলী দেখুন।
নমুনা
JSON এবং XML এর মধ্যে রূপান্তর সম্পর্কে বিস্তারিত আলোচনার জন্য, Apigee এর মাধ্যমে XML এবং JSON এর মধ্যে রূপান্তর: আপনার যা জানা দরকার তা দেখুন।
একটি প্রতিক্রিয়া রূপান্তর করা হচ্ছে
<XMLToJSON name="ConvertToJSON"> <Options> </Options> <OutputVariable>response</OutputVariable> <Source>response</Source> </XMLToJSON>
এই কনফিগারেশন—যা XML কে JSON এ রূপান্তর করার জন্য প্রয়োজনীয় ন্যূনতম কনফিগারেশন—একটি XML-ফরম্যাটেড রেসপন্স মেসেজকে সোর্স হিসেবে গ্রহণ করে এবং তারপর একটি JSON-ফরম্যাটেড মেসেজ তৈরি করে যা OutputVariable response পপুলেট করা হয়। পরবর্তী প্রক্রিয়াকরণ ধাপের জন্য 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 | নীতির অভ্যন্তরীণ নাম। ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে | N/A | প্রয়োজন |
continueOnError | একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে | মিথ্যা | ঐচ্ছিক |
enabled | নীতি প্রয়োগ করতে নীতি বন্ধ করতে | সত্য | ঐচ্ছিক |
async | এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷ | মিথ্যা | অবচয় |
<DisplayName> উপাদান
ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।
<DisplayName>Policy Display Name</DisplayName>
| ডিফল্ট | N/A আপনি এই উপাদানটি বাদ দিলে, নীতির |
|---|---|
| উপস্থিতি | ঐচ্ছিক |
| টাইপ | স্ট্রিং |
<সূত্র> উপাদান
যে ভেরিয়েবল, অনুরোধ বা প্রতিক্রিয়া, তাতে XML বার্তাটি রয়েছে যা আপনি JSON এ রূপান্তর করতে চান।
সোর্স মেসেজের HTTP কন্টেন্ট-টাইপ হেডারটি application/xml তে সেট করতে হবে, অন্যথায় নীতিটি প্রয়োগ করা হবে না।
যদি <Source> সংজ্ঞায়িত না করা হয়, তাহলে এটিকে বার্তা হিসেবে বিবেচনা করা হয় (যা নীতিটি যখন একটি অনুরোধ প্রবাহের সাথে সংযুক্ত থাকে তখন অনুরোধের সমাধান করে, অথবা নীতিটি যখন একটি প্রতিক্রিয়া প্রবাহের সাথে সংযুক্ত থাকে তখন প্রতিক্রিয়ার সমাধান করে)।
যদি উৎস ভেরিয়েবলটি সমাধান করা না যায়, অথবা একটি নন-মেসেজ টাইপে সমাধান করা হয়, তাহলে নীতিটি একটি ত্রুটি ছুড়ে দেয়।
<Source>response</Source>
| ডিফল্ট | API প্রক্সি প্রবাহে নীতিটি কোথায় যোগ করা হয়েছে তার উপর নির্ভর করে অনুরোধ বা প্রতিক্রিয়া নির্ধারণ করা হয় |
| উপস্থিতি | ঐচ্ছিক |
| আদর্শ | বার্তা |
<OutputVariable> উপাদান
XML থেকে JSON ফর্ম্যাট রূপান্তরের আউটপুট সংরক্ষণ করে। এটি সাধারণত উৎসের মান হিসাবে একই হয়, অর্থাৎ, সাধারণত XML প্রতিক্রিয়া একটি JSON প্রতিক্রিয়াতে রূপান্তরিত হয়।
XML বার্তার পেলোড পার্স করে JSON-এ রূপান্তরিত করা হয়, এবং XML-ফরম্যাট করা বার্তার HTTP Content-type হেডারটি 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"
}
}| ডিফল্ট | মিথ্যা |
| উপস্থিতি | ঐচ্ছিক |
| আদর্শ | বুলিয়ান |
<বিকল্প>/<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"
}
}| ডিফল্ট | মিথ্যা |
| উপস্থিতি | ঐচ্ছিক |
| আদর্শ | বুলিয়ান |
<বিকল্প>/<RecognizeNull> উপাদান
আপনাকে খালি মানগুলিকে নাল মানগুলিতে রূপান্তর করতে দেয়।
<RecognizeNull>true</RecognizeNull>
নিম্নলিখিত XML এর জন্য:
<a> <b></b> <c>value</c> </a>
যদি true , তাহলে এতে রূপান্তরিত হয়:
{
"a": {
"b": null,
"c": "value"
}
}যদি false , তাহলে এতে রূপান্তরিত হয়:
{
"a": {
"b": {},
"c": "value"
}
}| ডিফল্ট | মিথ্যা |
| উপস্থিতি | ঐচ্ছিক |
| আদর্শ | বুলিয়ান |
<বিকল্প>/<NullValue> উপাদান
উৎস বার্তায় স্বীকৃত নাল মানগুলিকে কোন মানটিতে রূপান্তর করা উচিত তা নির্দেশ করে। ডিফল্টরূপে মানটি null । RecognizeNull সত্য হলেই এই বিকল্পটি কার্যকর।
<NullValue>not-present</NullValue>
| ডিফল্ট | null |
| উপস্থিতি | ঐচ্ছিক |
| আদর্শ | স্ট্রিং |
<বিকল্প>/<নামস্থানব্লকনাম>
<বিকল্প>/<ডিফল্টনামস্থান>নোডনাম>
<বিকল্প>/<নামস্থানবিভাজক> উপাদান
এই উপাদানগুলো একসাথে ব্যবহার করুন।
<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> নির্দিষ্ট করেন, তাহলে আপনাকে অবশ্যই অন্য দুটি উপাদানও নির্দিষ্ট করতে হবে। |
| আদর্শ | স্ট্রিং |
<বিকল্প>/<টেক্সটঅলওয়েজঅ্যাজপ্রপার্টি>
<অপশন>/<টেক্সটনোডনাম> উপাদান
এই উপাদানগুলো একসাথে ব্যবহার করুন।
যদি 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> : স্ট্রিং |
<বিকল্প>/<অ্যাট্রিবিউটব্লকনাম>
<বিকল্প>/<অ্যাট্রিবিউটপ্রিফিক্স> উপাদান
এই উপাদানগুলো একসাথে ব্যবহার করুন।
আপনাকে একটি 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
} ...এই উদাহরণে লেভেল ৩ হল 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
} ...যেহেতু লেভেল ৪ হল প্রথম লেভেল যেখানে একাধিক শিশু থাকে, তাই আপনি এর চেয়ে কম লেভেল স্ট্রিপ করতে পারবেন না। যদি আপনি স্ট্রিপ লেভেল ৫, ৬, ৭, ইত্যাদিতে সেট করেন, তাহলে আপনি উপরের প্রতিক্রিয়া পেতে থাকবেন।
| ডিফল্ট | ০ (কোনও লেভেল স্ট্রিপিং নেই) |
| উপস্থিতি | ঐচ্ছিক |
| আদর্শ | পূর্ণসংখ্যা |
<বিকল্প>/<TreatAsArray>/<পথ> উপাদান
<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 কে ছোট করে। উদাহরণস্বরূপ, এখানে একটি JSON উদাহরণ দেওয়া হল: {
"teachers" : {
"teacher" : {
"name" : "teacherA",
"studentnames" : {
"name" : [
"student1",
"student2"
]}...এই উদাহরণে, আপনি যুক্তি দিতে পারেন যে <TreatAsArray>
<Path unwrap="true">teachers/teacher</Path>
<Path unwrap="true">teachers/teacher/studentnames/name</Path>
</TreatAsArray>
{
"teachers" : [{
"name" : "teacherA",
"studentnames" : ["student1","student2"]
}]...মনে রাখবেন যেহেতু | ঐচ্ছিক | বুলিয়ান |
আরও উদাহরণ এবং বৈশিষ্ট্যের ওয়াকথ্রুর জন্য, এই Apigee কমিউনিটি নিবন্ধটি দেখুন: কমিউনিটি টিউটোরিয়াল: XML থেকে JSON নীতিতে TreatAsArray বিকল্প ।
<ফরম্যাট>
ফরম্যাট আপনাকে 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> ব্যবহার না করা হলে প্রয়োজন। |
| আদর্শ | স্ট্রিং |
স্কিমা
ত্রুটির উল্লেখ
এই বিভাগটি ফল্ট কোড এবং ত্রুটি বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷
রানটাইম ত্রুটি
নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷
| ফল্ট কোড | HTTP স্থিতি | কারণ | ঠিক করুন |
|---|---|---|---|
steps.xmltojson.ExecutionFailed | 500 | এই ত্রুটিটি ঘটে যখন ইনপুট পেলোড (XML) খালি থাকে বা ইনপুট XML অবৈধ বা বিকৃত হয়। | build |
steps.xmltojson.InCompatibleType | 500 | এই ত্রুটিটি ঘটে যদি <Source> উপাদানে সংজ্ঞায়িত ভেরিয়েবলের ধরন এবং <OutputVariable> উপাদান একই না হয়। এটা বাধ্যতামূলক যে <Source> উপাদানের মধ্যে থাকা ভেরিয়েবলের ধরন এবং <OutputVariable> উপাদান মিলে যায়। | build |
steps.xmltojson.InvalidSourceType | 500 | এই ত্রুটিটি ঘটবে যদি <Source> উপাদানটি সংজ্ঞায়িত করতে ব্যবহৃত ভেরিয়েবলের ধরনটি অবৈধ। ভেরিয়েবলের বৈধ প্রকারগুলি হল বার্তা এবং স্ট্রিং। | build |
steps.xmltojson.OutputVariableIsNotAvailable | 500 | XML থেকে JSON নীতির <Source> উপাদানে উল্লেখিত ভেরিয়েবল টাইপ স্ট্রিং এবং <OutputVariable> উপাদানটি সংজ্ঞায়িত না হলে এই ত্রুটি ঘটে। <OutputVariable> উপাদানটি বাধ্যতামূলক যখন <Source> এলিমেন্টে সংজ্ঞায়িত ভেরিয়েবল টাইপ স্ট্রিং হয়। | build |
steps.xmltojson.SourceUnavailable | 500 | এই ত্রুটিটি ঘটে যদি XML থেকে JSON নীতির <Source> উপাদানে নির্দিষ্ট করা বার্তা পরিবর্তনশীল হয়:
| build |
স্থাপনার ত্রুটি
আপনি যখন এই নীতি সম্বলিত একটি প্রক্সি স্থাপন করেন তখন এই ত্রুটিগুলি ঘটতে পারে৷
| ত্রুটির নাম | কারণ | ঠিক করুন |
|---|---|---|
EitherOptionOrFormat | যদি XML থেকে JSON নীতিতে <Options> বা <Format> উপাদানগুলির একটি ঘোষণা করা না হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। | build |
UnknownFormat | যদি XML থেকে JSON নীতির মধ্যে <Format> উপাদানটির একটি অজানা বিন্যাস সংজ্ঞায়িত থাকে, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। পূর্বনির্ধারিত বিন্যাসগুলির মধ্যে রয়েছে: xml.com , yahoo , google , এবং badgerFish ৷ | build |
ফল্ট ভেরিয়েবল
রানটাইম ত্রুটি ঘটলে এই ভেরিয়েবলগুলি সেট করা হয়। আরও তথ্যের জন্য, নীতি ত্রুটি সম্পর্কে আপনার যা জানা দরকার তা দেখুন।
| ভেরিয়েবল | যেখানে | উদাহরণ |
|---|---|---|
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 নীতি