如何将JSON数组转换为WADL的XML元素

时间:2017-05-02 13:58:33

标签: json xml rest xsd

我正在尝试从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数组吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

由于我今天感觉很幸运,我仍然建议您尝试使用totals元素:

<xs:element name="totals" type="xs:string"/>

或者该工具是否可以处理演员:

<xs:element name="totals" type="xs:int"/>

(看看elements数组映射到XML的方式,似乎简单类型比totals的复杂类型更合适。