คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
อะไร
นโยบายนี้แปลงข้อความจากรูปแบบ Extensible Markup Language (XML) เป็น JavaScript Object Notation (JSON) ซึ่งมีตัวเลือกในการควบคุมลักษณะของข้อความ แปลงแล้ว
สมมติว่าความตั้งใจคือการแปลงการตอบกลับรูปแบบ XML เป็นรูปแบบ JSON นโยบายจะแนบกับโฟลว์การตอบกลับ (เช่น Response / ProxyEndpoint / PostFlow)
เกี่ยวกับ
ในสถานการณ์สื่อกลางทั่วไป นโยบาย 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
OutputVariable ขอบ
จะใช้เนื้อหาของตัวแปรนี้เป็นข้อความโดยอัตโนมัติสำหรับขั้นตอนการประมวลผลถัดไป
การอ้างอิงองค์ประกอบ
องค์ประกอบและแอตทริบิวต์ที่คุณกำหนดค่าได้ในนโยบายนี้มีดังนี้
<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 |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มี | ต้องระบุ |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
เท็จ | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
เท็จ | เลิกใช้ |
<DisplayName> องค์ประกอบ
ใช้เพิ่มเติมจากแอตทริบิวต์ name
เพื่อติดป้ายกำกับนโยบายใน
เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน
<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น |
ไม่มี หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ |
---|---|
การมีบุคคลอยู่ | ไม่บังคับ |
ประเภท | สตริง |
<Source> องค์ประกอบ
ตัวแปร คำขอ หรือการตอบกลับที่มีข้อความ XML ที่คุณต้องการแปลงเป็น JSON
ส่วนหัวประเภทเนื้อหา HTTP ของข้อความต้นฉบับต้องตั้งค่าเป็น
application/xml
ไม่เช่นนั้นนโยบายจะไม่มีผลบังคับใช้
หากไม่ได้กำหนด <Source>
จะถือว่าเป็นข้อความ (ซึ่งแปลค่า
เพื่อขอเมื่อมีการแนบนโยบายกับขั้นตอนคำขอ หรือตอบกลับเมื่อมีการแนบนโยบาย
กับขั้นตอนการตอบกลับ)
หากแก้ไขตัวแปรแหล่งที่มาไม่ได้ หรือไม่แปลงตัวแปรเป็นประเภทที่ไม่ใช่ข้อความ นโยบาย เกิดข้อผิดพลาด
<Source>response</Source>
ค่าเริ่มต้น | คำขอหรือการตอบกลับ ซึ่งกำหนดโดยตำแหน่งที่เพิ่มนโยบายลงในโฟลว์พร็อกซี API |
การตรวจหาบุคคล | ไม่บังคับ |
ประเภท | ข้อความ |
<OutputVariable> องค์ประกอบ
จัดเก็บเอาต์พุตของการแปลงรูปแบบ XML เป็น JSON ซึ่งโดยปกติจะเป็นค่าเดียวกับ แหล่งที่มา กล่าวคือ โดยทั่วไปการตอบสนอง XML จะถูกแปลงเป็นการตอบสนอง JSON
เพย์โหลดของข้อความ XML จะได้รับการแยกวิเคราะห์และแปลงเป็น JSON รวมถึงประเภทเนื้อหา HTTP
ส่วนหัวของข้อความในรูปแบบ XML ได้รับการตั้งค่าเป็น application/json
หากไม่ได้ระบุ OutputVariable
จะถือว่า source
เป็น
OutputVariable
ตัวอย่างเช่น หาก source
คือ response
จากนั้น OutputVariable
จะมีค่าเริ่มต้นเป็น response
<OutputVariable>response</OutputVariable>
ค่าเริ่มต้น | คำขอหรือการตอบกลับ ซึ่งกำหนดโดยตำแหน่งที่เพิ่มนโยบายลงในโฟลว์พร็อกซี API |
การตรวจหาบุคคล | จำเป็นต้องมีองค์ประกอบนี้เมื่อตัวแปรที่กำหนดไว้ในองค์ประกอบ <Source> เป็นสตริงประเภท |
ประเภท | ข้อความ |
<Options>
ตัวเลือกต่างๆ ช่วยให้คุณควบคุมการแปลงจาก XML เป็น JSON ได้ ใช้
<Options>
ซึ่งจะช่วยให้คุณเพิ่มการตั้งค่า Conversion ที่ต้องการ หรือ
<Format>
ซึ่งให้คุณอ้างอิงเทมเพลตของ
ตัวเลือกที่กำหนดไว้ล่วงหน้า คุณไม่สามารถใช้ทั้ง <Options>
และ
<Format>
ต้องระบุ <Options>
หากไม่ใช้ <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" } }
ค่าเริ่มต้น | เท็จ |
การตรวจหาบุคคล | ไม่บังคับ |
ประเภท | บูลีน |
<Options>/<RecognizeBoolean> องค์ประกอบ
ให้ Conversion คงค่าจริง/เท็จไว้แทนการเปลี่ยนค่าเป็น สตริง
<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>
สำหรับ XML ต่อไปนี้
<a> <b></b> <c>value</c> </a>
หากเป็น true
ให้แปลงเป็น
{ "a": { "b": null, "c": "value" } }
หากเป็น false
ให้แปลงเป็น
{ "a": { "b": {}, "c": "value" } }
ค่าเริ่มต้น | เท็จ |
การตรวจหาบุคคล | ไม่บังคับ |
ประเภท | บูลีน |
<Options>/<NullValue> องค์ประกอบ
บ่งชี้ค่าที่ควรเป็นค่า Null ที่รู้จักในข้อความต้นฉบับ
แปลงแล้ว ค่าเริ่มต้นคือ 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> คุณต้องระบุ
อีก 2 องค์ประกอบ |
ประเภท | สตริง |
<Options>/<TextAlwaysAsProperty>
<Options>/<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> : ไม่มี |
การตรวจหาบุคคล | ไม่บังคับ |
ประเภท | <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>
มี 4 ระดับก่อนที่คุณจะไปที่ระดับรัฐ เมือง คําอธิบาย และอุณหภูมิ
หากไม่ได้ใช้ <StripLevels>
การตอบสนอง JSON ที่แปลงแล้วจะมีลักษณะดังนี้
ดังนี้
{ "Envelope" : { "Body" : { "GetCityWeatherByZIPResponse" : { "GetCityWeatherByZIPResult" : { "State" : "CO", "City" : "Denver", "Description" : "Sunny", "Temperature" : "62" } } } } }
ถ้าคุณต้องการตัด 4 ระดับแรกออกในการตอบกลับ 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>
(นำ
3 ระดับแรก) 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 (ไม่มีระดับการตัด) |
การตรวจหาบุคคล | ไม่บังคับ |
ประเภท | จำนวนเต็ม |
<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" ]} } } }
สังเกตว่าชื่อนักเรียนทั้ง 2 คนอยู่ในอาร์เรย์
แต่หากมีนักเรียนคนเดียวปรากฏในเอกสาร 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 อยู่ในอาร์เรย์แล้ว ในปัจจุบัน ไม่ว่าตอนนี้จะมี
คุณสามารถดึงนักเรียนจากอาร์เรย์ JSON ในโค้ดของคุณโดยใช้ JSONPath ต่อไปนี้
$.teachers.teacher.studentnames.name[0]
องค์ประกอบ <Path>
ยังมีแอตทริบิวต์ unwrap
ตามที่อธิบายไว้ใน
หัวข้อถัดไป
ค่าเริ่มต้น | NA |
การตรวจหาบุคคล | ไม่บังคับ |
ประเภท | สตริง |
Attributes
<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
<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 |
500 | ข้อผิดพลาดนี้เกิดขึ้นเมื่อเพย์โหลดอินพุต (XML) ว่างเปล่า หรือ XML อินพุตไม่ถูกต้องหรือผิดรูปแบบ | build |
steps.xmltojson.InCompatibleType |
500 | ข้อผิดพลาดนี้เกิดขึ้นหากประเภทตัวแปรที่กำหนดไว้ในองค์ประกอบ <Source> และ
องค์ประกอบ <OutputVariable> ไม่เหมือนกัน ซึ่งจำเป็นต้องมีประเภทของตัวแปร
ที่มีอยู่ภายในองค์ประกอบ <Source> และองค์ประกอบ <OutputVariable> ตรงกัน
|
build |
steps.xmltojson.InvalidSourceType |
500 | ข้อผิดพลาดนี้เกิดขึ้นหากประเภทของตัวแปรที่ใช้กำหนดองค์ประกอบ <Source> คือ
ไม่ถูกต้อง ประเภทตัวแปรที่ถูกต้องคือ ข้อความและสตริง |
build |
steps.xmltojson.OutputVariableIsNotAvailable |
500 | ข้อผิดพลาดนี้เกิดขึ้นหากตัวแปรที่ระบุในองค์ประกอบ <Source> ของ XML ถึง
นโยบาย JSON เป็นสตริงประเภทและไม่ได้กำหนดองค์ประกอบ <OutputVariable>
องค์ประกอบ <OutputVariable> เป็นข้อมูลที่ต้องระบุเมื่อตัวแปรที่กำหนดไว้ใน <Source>
จัดอยู่ในประเภทสตริง |
build |
steps.xmltojson.SourceUnavailable |
500 |
ข้อผิดพลาดนี้จะเกิดขึ้นหากข้อความ
ตัวแปรที่ระบุในองค์ประกอบ <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 นโยบาย