আপনি 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">
The following table describes attributes that are common to all policy parent elements:
Attribute | Description | Default | Presence |
---|---|---|---|
name |
The internal name of the policy. The value of the Optionally, use the |
N/A | Required |
continueOnError |
Set to Set to |
false | Optional |
enabled |
Set to Set to |
true | Optional |
async |
This attribute is deprecated. |
false | Deprecated |
<DisplayName> element
Use in addition to the name
attribute to label the policy in the
management UI proxy editor with a different, natural-language name.
<DisplayName>Policy Display Name</DisplayName>
Default |
N/A If you omit this element, the value of the policy's |
---|---|
Presence | Optional |
Type | String |
<উৎস> উপাদান
পরিবর্তনশীল, অনুরোধ বা প্রতিক্রিয়া, যেটিতে 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> উপাদান
উৎস বার্তার স্বীকৃত শূন্য মানগুলিকে যে মানে রূপান্তর করা উচিত তা নির্দেশ করে৷ ডিফল্টরূপে মানটি null
। RecognizeNull
সত্য হলেই এই বিকল্পটি কার্যকর।
<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 কেও ছোট করে। উদাহরণস্বরূপ, এখানে একটি 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 কমিউনিটি নিবন্ধটি দেখুন: 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. | build |
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.
|
build |
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. |
build |
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. |
build |
steps.xmltojson.SourceUnavailable |
500 |
This error occurs if the message
variable specified in the <Source> element of the XML to JSON policy is either:
|
build |
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.
|
build |
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 .
|
build |
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 নীতি