【问题标题】:Can we get JSON output with XSD schema in specified and required format?我们能否以指定和所需的格式获得带有 XSD 模式的 JSON 输出?
【发布时间】:2018-07-11 15:35:35
【问题描述】:

我正在尝试将数据从我们的系统连接到第三方系统,该系统接受标准 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":[{ ) 缺失且最后一个底部的右括号部分 ( }}]} ) 丢失。

我尝试了不同的方法,但似乎没有任何效果。

以下是我的 xml 输出,需要使用 xsd 模式转换为 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 格式的输出。

非常感谢您对此的投入。

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

谢谢, 吉腾德拉。

【问题讨论】:

    标签: json xml xsd jsonp


    【解决方案1】:

    我不知道您为什么认为 XSD Schema 会帮助解决这个问题。可能有一些架构处理器包含用于 XML 到 JSON 转换的工具,但这并不是架构处理器的意义所在。

    有很多用于 XML 到 JSON 转换的库,它们在为您提供对输出格式的控制程度方面差异很大(将 XML 转换为 JSON 的方法与工具一样多 -它们都会产生不同的输出)。

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

    在 XSLT 3.0 中,我将分两个阶段进行。首先是一个常规的 XML 到 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>
    

    【讨论】:

      猜你喜欢
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 2021-02-03
      • 1970-01-01
      • 2020-05-06
      相关资源
      最近更新 更多