2017-09-25 139 views
1

這是我的測試數據:如何指示特定的JSON路徑?

{ 
    "errorCode": null, 
    "errorMessage": null, 
    "responseItems": [ 
    { 
     "errorCode": null, 
     "errorMessage": null, 
     "personId": "FCC2", 
     "personCode": "SUNEETHA", 
     "personFirstName": "suneetha", 
     "personLastName": "Durgam", 
     "office": "London", 
     "officeCode": "L", 
     "department": "Product", 
     "departmentCode": "PR", 
     "subDepartment": "QA", 
     "subDepartmentCode": "QA", 
     "timeOffStaffSummaryDTO": [ 
     { 
      "officeCode": null, 
      "startMonthYear": null, 
      "endMonthYear": null, 
      "personId": null, 
      "alphaId": null, 
      "continent": null, 
      "allowancesIntotal": 20, 
      "allowancesUsed": 0, 
      "allowancesSubmitted": 0, 
      "allowancesApproved": 0, 
      "allowancesRemaining": 20, 
      "timeOffType": { 
      "id": 4001, 
      "continent": "EU", 
      "alphaId": "9J", 
      "code": "PTO", 
      "description": "Personal Time Offdd", 
      "account": "MADMIN", 
      "colourCode": "#CCCCCC", 
      "approvalRequired": true, 
      "commentRequired": false, 
      "paid": true 
      }, 
      "timeOffTypeWithoutAllowance": false 
     } 
     ] 
    } 
    ] 
} 

我試圖去使用此路徑的Timeoff類型描述:

$.responseItems[0].timeOffStaffSummaryDTO[0].timeOffType.description 

現在,這適用於任何JSON路徑測試我在網上嘗試,但該模板不會在頁面標題欄中顯示此值。

在重複細節帶,我也試圖顯示此:

$.responseItems.timeOffStaffSummaryDTO[0].timeOffTypeWithoutAllowance 

試了一下沒有$符號或第一點,沒有什麼區別,它總是顯示爲空。我也嘗試過在字段描述中或作爲屬性「net.sf.jasperreports.json.field.expression」的值。

我錯過了什麼?

回答

2

你錯過了如何在使用json時聲明你的字段,我會向你展示一個考慮你的json的例子。

如果您的數據源的基本路徑(的queryString,該報告會重複關於這些項目的詳細信息區域)是responseItems

<queryString language="JSON"> 
    <![CDATA[responseItems]]> 
</queryString> 

要訪問personCode您將定義一個字段作爲

<field name="personCode" class="java.lang.String"> 
    <fieldDescription><![CDATA[personCode]]></fieldDescription> 
</field> 

fieldDescription是你的json中的路徑,因此要訪問timeOffStaffSummaryDTO[0].timeOffType.description你需要聲明一個字段

<field name="timeOffStaffSummaryDTOTimeOffTypeDescription" class="java.lang.String"> 
    <fieldDescription><![CDATA[timeOffStaffSummaryDTO[0].timeOffType.description]]></fieldDescription> 
</field> 

名稱可以是任何你喜歡的,這個類是對應的Java類 的價值和fieldDescription需求相對於你的 數據源(的queryString)的路徑是。

完整示例

在兩個頭timeOffStaffSummaryDTO[0].timeOffType.description(粗體)全部實施例和詳細帶

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="jsonTest" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="afa1e750-acfe-4d43-92ff-76e139d34dac"> 
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="JsonTest"/> 
    <queryString language="JSON"> 
     <![CDATA[responseItems]]> 
    </queryString> 
    <field name="personCode" class="java.lang.String"> 
     <fieldDescription><![CDATA[personCode]]></fieldDescription> 
    </field> 
    <field name="timeOffStaffSummaryDTOTimeOffTypeDescription" class="java.lang.String"> 
     <fieldDescription><![CDATA[timeOffStaffSummaryDTO[0].timeOffType.description]]></fieldDescription> 
    </field> 
    <pageHeader> 
     <band height="35" splitType="Stretch"> 
      <textField> 
       <reportElement x="0" y="0" width="260" height="30" uuid="449b7c85-a952-4205-9595-de2647d563ed"/> 
       <textElement verticalAlignment="Middle"> 
        <font isBold="true"/> 
       </textElement> 
       <textFieldExpression><![CDATA[$F{timeOffStaffSummaryDTOTimeOffTypeDescription}]]></textFieldExpression> 
      </textField> 
     </band> 
    </pageHeader> 
    <detail> 
     <band height="32" splitType="Stretch"> 
      <textField> 
       <reportElement x="0" y="0" width="180" height="30" uuid="832d525e-b932-4563-9f00-c4e3fc671061"/> 
       <textElement verticalAlignment="Middle"/> 
       <textFieldExpression><![CDATA[$F{personCode}]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement x="180" y="0" width="260" height="30" uuid="528a9d25-2329-4f1f-b0be-21d1b6b8a5a0"/> 
       <textElement verticalAlignment="Middle"/> 
       <textFieldExpression><![CDATA[$F{timeOffStaffSummaryDTOTimeOffTypeDescription}]]></textFieldExpression> 
      </textField> 
     </band> 
    </detail> 
</jasperReport> 

輸出

result

+0

許多,非常感謝 - 特別是花時間顯示代碼和輸出!我的查詢定義是正確的,但我的字段定義已關閉 - 我需要擺脫.responseItems位。使用JSONPath非常新,直到現在才處理xml數據。 – user2668539

+0

@ user2668539您的歡迎,感謝您的接受 –