我正在尝试从Web服务检索数据,而专有的ETL工具(我必须使用)需要一个.WADL文件来连接到REST服务。
到目前为止,我已经在SOAP UI的帮助下从API端点创建了一个.WADL文件,然后我在fmt.Println("Returned:", half(10))
// Error: multiple-value half() in single-value context
标记之间放置了模式定义(用于响应)。为此,我已经将预期的JSON输出从Web服务转换为XML,然后在在线格式化程序的帮助下转换为XSD。
这适用于大多数原始JSON元素,但是当元素是JSON数组(没有名称)时,我的ETL工具无法解析该值。
为了说明,Web服务的输出看起来与此类似(我稍微缩短了输出):
<grammars> </grammars>
XSD看起来像这样(在我已经删除了一些名为“element”的不需要的元素之后,在线转换器将其放在那里作为原始JSON数组的替代品(例如“元素”)):
{
"report": {
"type": "overtime",
"elements": [ {
"id": "datetime",
"name": "Date"
}],
"totals": ["51245123"]
}
}
当我在.WADL文件中使用上面的XSD时,由于不匹配,我的工具在解析“totals”元素时失败。
当我删除名为“element”的复杂类型元素并使用<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="report">
<xs:complexType>
<xs:sequence>
<xs:element name="elements">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="id"/>
<xs:element type="xs:string" name="name"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="totals">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:int" name="element"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element type="xs:string" name="type"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
时,我获取除元素名称“totals”之外的所有属性的值。这显示为null。
这意味着我可以获取JSON数组“元素”的数据,但不能获取“总计”的数据。 正如我所看到的,我的问题仅在于没有名称的“普通”JSON数组,因为我无法将它们绑定到具有相同名称的XS元素。
如果我要编写代码,我会尝试从totals [0]中获取值,但我无法控制该工具如何解析来自服务器的JSON响应。但是,由于我能够获取所有属性的值(也来自使用名称/键的其他JSON数组),我想有一种方法可以使它适用于“普通”JSON数组。
有人可以告诉我如何在XSD中处理这些JSON数组吗?
谢谢。
答案 0 :(得分:0)
由于我今天感觉很幸运,我仍然建议您尝试使用totals
元素:
<xs:element name="totals" type="xs:string"/>
或者该工具是否可以处理演员:
<xs:element name="totals" type="xs:int"/>
(看看elements
数组映射到XML的方式,似乎简单类型比totals
的复杂类型更合适。