我们可以使用指定和所需格式的XSD架构获取JSON输出吗?

时间:2018-02-01 10:31:29

标签: json xml xsd jsonp

我正在尝试将数据从我们的系统接口到第三方系统,该系统接受标准json格式的数据,并且只接受指定的格式。我们的系统以xml格式提供输出,我需要xsd模式来将数据从xml转换为json格式。

以下是第三方系统接受的示例标准JSON格式

  {
  "checkups":
  [
  {
  "checkupId" : " 20 " ,
  "jobTitle": " Busisness Analyst, Project Management " ,
  "requisitionNumber": " F834234 " ,
  "subAccount":{
  "email": "ramesh.rathod@uic.com" ,
  "firstName": " Ramesh " ,
  "lastName": " Rathod " ,
  "phone": " +1 (189) 234-1122 x11-1275 "
  }
  "candidate":{
  "email": "srujan.rao@gmail.com" ,
  "firstName": " srujan " ,
  "lastName": " rao "
  }
  }
  ]
  }

我已经尝试过编写模式来获取上面的json输出格式,但我没有得到所需格式的json输出,其中顶部({“checkups”:[{)缺失并且在最后一个底部关闭括号part(}}]})缺失。

我尝试过不同的方式,但似乎没有任何结果。

以下是我的xml输出,需要使用xsd schema转换为json格式。

  <wd:Report_Data xmlns:wd="urn:com.workday.report/RPT_Checkster_Outbound">
  <wd:Report_Entry>
  <wd:Checkupid>20</wd:Checkupid>
  <wd:JobTitle>Busisness Analyst, Project Management</wd:JobTitle>
  <wd:ReqID>F834234</wd:ReqID>
  <wd:Recruiter>
  <wd:InitEmail wd:Descriptor="ramesh.rathod@uic.com"></wd:InitEmail>
  <wd:p.InitFirstName>Ramesh</wd:p.InitFirstName>
  <wd:p.InitLastName>Rathod</wd:p.InitLastName>
  <wd:p.Phone wd:Descriptor="+1 (189) 234-1122 x11-1275">
  <wd:ID wd:type="WID">38fea2b75a77010c76933e693e57d3eb</wd:ID>
  </wd:p.Phone>
  </wd:Recruiter>
  <wd:Active_Candidates>
  <wd:CandEmail>srujan.rao@gmail.com</wd:CandEmail>
  <wd:p.FirstName>srujan</wd:p.FirstName>
  <wd:p.LastName>rao</wd:p.LastName>
  </wd:Active_Candidates>

虽然我的xml中没有subaccount属性,但无论如何我们可以按照上面的示例json格式指定输出吗?

我知道中间级别的xsd架构,但我不是xsd架构的优秀专家,因此我需要xsd架构专家的帮助才能获得所需及以上指定的json格式的输出。

非常感谢对此的投入。

如果需要,请告诉我任何其他信息。

谢谢, Jithendra。

1 个答案:

答案 0 :(得分:0)

我不知道为什么你认为XSD Schema可以帮助解决这个问题。可能有一些模式处理器包含用于XML到JSON转换的工具,但这并不是模式处理器意味着它的一部分。

有很多用于XML-to-JSON转换的库,它们在输出格式上给你的控制程度有很大差异(有很多不同的方法可以将XML转换为JSON,就像工具一样 - 它们都会产生不同的输出。)

因为您的输入和输出不是非常密切相关(例如wd:p.InitFirstName需要变成firstName),所以我建议XSLT来完成这项工作。您可以使用XSLT 1或2手动生成JSON输出,也可以利用XSLT 3.0附带的内置JSON输出序列化。

在XSLT 3.0中,我会分两个阶段完成。首先是一个常规的XML-to-XML转换,它将您的输入转换为如下所示:

<map xmlns="http://www.w3.org/2005/xpath-functions">
  <array key="checkups">
    <map>
       <string key="checkupId">20</string>
       <string key="jobTitle">Busisness Analyst, Project Management</string>
       <string key="requisitionNumber">F834234</string>
       <map key="subAccount">
         <string key="email">ramesh.rathod@uic.com</string>
etc

然后调用xml-to-json()函数将其转换为JSON。

第一阶段可以使用一组模板规则来完成,例如:

<xsl:template match="wd:p.InitFirstName">
  <string key="firstName">{.}</string>
</xsl:template>

<xsl:template match="wd:subAccount">
  <map key="subAccount">
    <xsl:apply-templates/>
  </map>
</xsl:template>