درحال مشاهده اسناد 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 | نام داخلی سیاست. مقدار مشخصه در صورت تمایل، از عنصر | N/A | مورد نیاز |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی روی | نادرست | اختیاری |
enabled | برای اجرای خط مشی روی برای خاموش کردن خط مشی، روی | درست است | اختیاری |
async | این ویژگی منسوخ شده است. | نادرست | منسوخ شده است |
عنصر <DisplayName>
علاوه بر ویژگی name برای برچسبگذاری خطمشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.
<DisplayName>Policy Display Name</DisplayName>
| پیش فرض | N/A اگر این عنصر را حذف کنید، از مقدار ویژگی |
|---|---|
| حضور | اختیاری |
| تایپ کنید | رشته |
عنصر <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 موردنیاز برای بازیابی مقادیر را کوتاه میکند. برای مثال،
بهجای در اینجا نمونهای از 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» را ببینید: آموزش انجمن: گزینه 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>
<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 ورودی نامعتبر یا بدشکل باشد. | build |
steps.xmltojson.InCompatibleType |
۵۰۰ | این خطا زمانی رخ میدهد که نوع متغیر تعریفشده در عنصر <Source> و عنصر <OutputVariable> یکسان نباشد. الزامی است که نوع متغیرهای
موجود در عنصر <Source> و عنصر <OutputVariable> مطابقت داشته باشد.
|
build |
steps.xmltojson.InvalidSourceType |
۵۰۰ | این خطا زمانی رخ میدهد که نوع متغیر استفادهشده برای تعریف عنصر <Source> نامعتبر باشد.انواع معتبر متغیر عبارتاند از پیام و رشته. |
build |
steps.xmltojson.OutputVariableIsNotAvailable |
۵۰۰ | این خطا زمانی رخ میدهد که متغیر مشخصشده در عنصر <Source> از XML به
خطمشی JSON از نوع رشته باشد و عنصر <OutputVariable> تعریف نشده باشد.
وقتی متغیر تعریفشده در عنصر <Source>
از نوع رشته باشد، عنصر <OutputVariable> اجباری است. |
build |
steps.xmltojson.SourceUnavailable |
۵۰۰ |
این خطا زمانی رخ میدهد که متغیر پیام
مشخصشده در عنصر <Source> خطمشی XML به JSON یکی از موارد زیر باشد:
|
build |
خطاهای استقرار
این خطاها ممکن است زمانی رخ دهند که یک پراکسی حاوی این خطمشی را مستقر میکنید.
| نام خطا | علت | رفع اشکال |
|---|---|---|
EitherOptionOrFormat |
اگر یکی از عناصر <Options> یا <Format> در «خطمشی XML به JSON»
اعلام نشده باشد، استقرار پراکسی API ناموفق خواهد بود.
|
build |
UnknownFormat |
اگر عنصر <Format> در خطمشی XML به JSON قالب ناشناختهای داشته باشد،
استقرار پراکسی 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