2012-10-30 218 views
2

我有一些從我的數據庫轉儲的XML數據,我需要將它重新格式化爲JSON。我使用的是IBM DataPower數據庫,因此實際上我需要將該XML轉換爲JSONx,然後使用IBM的默認轉換程序,該轉換程序會自動將JSONx轉換爲JSON。JSONX到JSON轉換

我很難定義JSONx數組的元素。下面是我目前想:

XML

<sql result="success"> 
    <row> 
     <column> 
      <name>Prod</name> 
      <value>Acura</value> 
     </column> 
     <column> 
      <name>Color</name> 
      <value>SILVER</value> 
     </column> 
     <column> 
      <name>Prod</name> 
      <value>Accord</value> 
     </column> 
     <column> 
      <name>Color</name> 
      <value>Gold</value> 
     </column> 
    </row> 
</sql> 


期望中的JSON輸出

{"Category" : [ 
    {「prod」: 「Acura」, "Color" : 「Silver」}, 
    {「prod」: 「Accord」, "Color" : 「Gold」} 
    ], 
    "Status" : 「Success」 
    } 

我遇到的問題是,我不能讓prodcolor成爲同一個JSON對象的一部分。像這樣的相反,我得到的輸出:

{"Category": [{ 
    "ID": [ 
     ": Acura", 
     ": Accord" 
     ], 
    "NAME": [ 
     ": SILVER", 
     ": Gold" 
     ] 
}]} 

下面是我使用的是產生問題的JSON的的JSONx代碼:

<json:object 
    xsi:schemaLocation="http://www.datapower.com/schemas/json jsonx.xsd" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"> 
    <json:array name="Category"> 
     <json:object> 
      <xsl:for-each select="//column"> 
       <xsl:variable name="colName" select="name" /> 
       <xsl:if test="$colName = 'Prod'"> 
        <json:string name="Prod">: 
         <xsl:value-of select="value" /> 
        </json:string> 
       </xsl:if> 
       <xsl:if test="$colName = 'Color'"> 
        <json:string name="Color">: 
         <xsl:value-of select="value" /> 
        </json:string> 
       </xsl:if> 
      </xsl:for-each> 
     </json:object> 
    </json:array> 
</json:object> 

我可以告訴大家,<xsl:for-each>標籤正在經歷一個條件並在循環中創建JSON對象,但我不明白如何在之後創建JSON對象,它將獲取colorprod的值。我怎樣才能確保這些值被正確解析?

+1

慎用那些聰明的引號.. – Eric

回答

0

你有更多的工作,對database to xml解析,得到一個這樣的XML:

<product-list> 
    <product> 
     <name>Acura</name> 
     <color>SILVER</color> 
    </product> 
    <product> 
     <name>Accord</name> 
     <color>Gold</color> 
    </product> 
</product-list> 

這樣會更容易實現,只要你想解析它。

您展示XML,也許是有可能做到這一點,但它會開車送你到不合理的複雜性......我認爲

編輯:我的編程環境是沒有準備好這樣的事情......所以讓我知道結果

<json:object xsi:schemaLocation="http://www.datapower.com/schemas/json jsonx.xsd" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"> 
    <json:array name="Category"> 
     <xsl:for-each select="product"> 
      <json:object> 
       <json:string name="prod"><xsl:value-of select="name"/></json:string> 
       <json:string name="Color"><xsl:value-of select="color"/></json:string> 
      </json:object> 
     <xsl:for-each> 
    <json:array> 
</json:object> 

或這樣

<json:object xsi:schemaLocation="http://www.datapower.com/schemas/json jsonx.xsd" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"> 
    <json:array name="Category"> 
     <xsl:for-each select="product"> 
      <xsl:text>{<xsl:text> 
       <json:string name="prod"><xsl:value-of select="name"/></json:string> 
       <json:string name="Color"><xsl:value-of select="color"/></json:string> 
      <xsl:text>}<xsl:text> 
     <xsl:for-each> 
    <json:array> 
</json:object> 

我認爲首先是罰款...在對象需要名稱的情況下,選擇最後。

+0

請告訴我如何解析你提到的XML並以JSON格式打印它,就像我提到的 – Ironman

+0

ok給我一些時間 – memosdp

2

您好我得到了答案,我曾嘗試多種可能性,這是posibility之一,我會得到輸出就像我在這個問題提到

<json:object xsi:schemaLocation="http://www.datapower.com/schemas/json jsonx.xsd" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"> 
    <json:array name="Categories"> 

<xsl:for-each select="sql/row"> 
<json:object> 
<xsl:for-each select="column"> 
<xsl:variable name="colName" select="name" /> 
<xsl:choose> 
<xsl:when test="$colName = 'PROD "> 
<json:string name="name"> <xsl:value-of select="value"/></json:string> 
</xsl:when> 
<xsl:when test="$colName = 'NAME'"> 
<json:string name="ID"> <xsl:value-of select="value"/></json:string> 
</xsl:when> 
</xsl:choose> 
</xsl:for-each> 
</json:object> 
</xsl:for-each> 
</json:array> 
    </json:object> 

輸出

{"Categories": [ 
     { 
     "prod": "Acura", 
     "color": "SILVER" 
    }, 
     { 
     "prod": "Accord", 
     "color": "Gold" 
    } 
]} 
+1

+1 ...你證明我錯了那個'it會把你逼到不合理的公司複雜的......不要忘記接受你的答案:) – memosdp

+0

哈哈沒有人..你的幫助表示讚賞..事實上,我通過觀察你的答案得到了答案.. :) – Ironman