Jump to content
We've recently updated our Privacy Statement, available here ×

jaspersoft studio 6.12 JSONQL JSONArray issue with charcter -


raval.chintan
Go to solution Solved by narcism,

Recommended Posts

Hi All, 

I am having below Json structure. 

{

  "DataItem": {
    
    "AB-CDEF": {
   
      "GroupData": {
       
        "OGF": {
          "FRN": [
            100,    
            14,
            14,
            14,
            15
          ]
        }
      }
    }
}
}

Below is my Sample JRXML. 

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.12.0.final using JasperReports Library version 6.12.1-ac0eebdb29e4c0985457bab279a6db744d661530  -->
<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="Demo_Phone_list" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="cd0a2f09-0067-489b-8fe7-c8cbec7635c6">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="sample_list_phone"/>
    <subDataset name="Dataset1" uuid="5337e69f-16e4-447d-a9e7-fbe6d25a479f">
        <property name="com.jaspersoft.studio.data.defaultdataadapter"/>
        <queryString language="JSON">
            <![CDATA[]]>
        </queryString>
        <field name="FirmReferenceNumber" class="java.lang.String">
            <property name="net.sf.jasperreports.jsonql.field.expression" value="[0]"/>
            <fieldDescription><![CDATA[FirmReferenceNumber]]></fieldDescription>
        </field>
    </subDataset>
    <queryString language="jsonql">
        <![CDATA[]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="100" splitType="Stretch">
            <componentElement>
                <reportElement x="346" y="30" width="320" height="60" uuid="46f04a61-454e-43e8-af82-f4b6490e2080"/>
                <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
                    <datasetRun subDataset="Dataset1" uuid="16a9a001-6c9b-4847-aa98-40b2c4c7296d">
                        <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("DataItem.AB-CDEF.GroupData.OGF.FRN")]]></dataSourceExpression>
                    </datasetRun>
                    <jr:listContents height="60" width="320">
                        <textField>
                            <reportElement x="100" y="19" width="188" height="30" uuid="4b05337f-4af5-4a13-a057-11324d2e4cff"/>
                            <box>
                                <topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
                                <leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
                                <bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
                                <rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
                            </box>
                            <textElement textAlignment="Center" verticalAlignment="Middle"/>
                            <textFieldExpression><![CDATA[$F{FirmReferenceNumber}]]></textFieldExpression>
                        </textField>
                    </jr:listContents>
                </jr:list>
            </componentElement>
        </band>
    </detail>
</jasperReport>
 

I am having issue in whie generating the pdf. Jaspersoft studio does not take character '-' in string "AB-CDEF". If I replace the string as "AB_CDEF" or "ABCDEF" , then I am able o get the pdf generated.  I am getting below error if I put 'AB-CDEF'.

net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: ((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("DataItem.AB-CDEF.GroupData.OGF.FRN")
    at com.jaspersoft.studio.editor.preview.view.control.ReportController.fillReport(ReportController.java:551)
    at com.jaspersoft.studio.editor.preview.view.control.ReportController.access$18(ReportController.java:526)
    at com.jaspersoft.studio.editor.preview.view.control.ReportController$1.run(ReportController.java:444)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: ((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("DataItem.AB-CDEF.GroupData.OGF.FRN")
    at net.sf.jasperreports.engine.fill.JREvaluator.handleEvaluationException(JREvaluator.java:241)
    at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:273)
    at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:673)
    at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:641)
    at net.sf.jasperreports.components.list.FillDatasetRun.evaluate(FillDatasetRun.java:131)
    at net.sf.jasperreports.components.list.BaseFillList.evaluate(BaseFillList.java:115)
    at net.sf.jasperreports.engine.fill.JRFillComponentElement.evaluate(JRFillComponentElement.java:110)
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:383)
    at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:548)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2597)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:823)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:264)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:110)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:615)
    at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFill.run(BaseFillHandle.java:135)
    at java.lang.Thread.run(Thread.java:748)
Caused by: net.sf.jasperreports.engine.JRRuntimeException: java.lang.RuntimeException: line 1:13: expecting ' ', found '-'
    at net.sf.jasperreports.engine.util.json.DefaultJsonQLExecuter.getJsonQLExpression(DefaultJsonQLExecuter.java:121)
    at net.sf.jasperreports.engine.util.json.DefaultJsonQLExecuter.selectNodes(DefaultJsonQLExecuter.java:59)
    at net.sf.jasperreports.engine.data.JsonQLDataSource.moveFirst(JsonQLDataSource.java:133)
    at net.sf.jasperreports.engine.data.JsonQLDataSource.<init>(JsonQLDataSource.java:123)
    at net.sf.jasperreports.engine.data.JsonQLDataSource.subDataSource(JsonQLDataSource.java:185)
    at Demo_Phone_list_1592802727867_136034.evaluate(Demo_Phone_list_1592802727867_136034:185)
    at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:259)
    ... 14 more
Caused by: java.lang.RuntimeException: line 1:13: expecting ' ', found '-'
    at net.sf.jasperreports.engine.json.parser.JsonQueryLexer.reportError(JsonQueryLexer.java:60)
    at net.sf.jasperreports.engine.json.parser.JsonQueryLexer.nextToken(JsonQueryLexer.java:287)
    at antlr.TokenBuffer.fill(TokenBuffer.java:69)
    at antlr.TokenBuffer.LA(TokenBuffer.java:80)
    at antlr.LLkParser.LA(LLkParser.java:52)
    at net.sf.jasperreports.engine.json.parser.JsonQueryParser.memberExpr(JsonQueryParser.java:149)
    at net.sf.jasperreports.engine.json.parser.JsonQueryParser.pathExpr(JsonQueryParser.java:118)
    at net.sf.jasperreports.engine.util.json.DefaultJsonQLExecuter.getJsonQLExpression(DefaultJsonQLExecuter.java:112)
    ... 20 more
Caused by: line 1:13: expecting ' ', found '-'
    at antlr.CharScanner.match(CharScanner.java:195)
    at net.sf.jasperreports.engine.json.parser.JsonQueryLexer.mWS(JsonQueryLexer.java:1540)
    at net.sf.jasperreports.engine.json.parser.JsonQueryLexer.nextToken(JsonQueryLexer.java:284)
    ... 26 more
 

Is this bug?

I am using jasper studio 6.12. 

Regards

Chintan

 

 

Link to comment
Share on other sites

  • Replies 3
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

  • Solution

This is not a bug. The "AB-CDEF" in "DataItem.AB-CDEF" is not a valid object key in JSONQL, so it needs to be wrapped in quotes and square brackets:

<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("DataItem["AB-CDEF"].GroupData.OGF.FRN")]]></dataSourceExpression>[/code]

There are more details in the JSONQL description page here: http://jasperreports.sourceforge.net/sample.reference/jsonqldatasource/index.html#jsonql

Link to comment
Share on other sites

Hello Narcism,

Thanks for your input it worked.

I have few more queries. Our Json is bit more complex with respect to special characters like @ and - in key.  How shall we use the escape character sequence with few more json key as given below in example.

 

{

  "DataItem": {
    
    "AB-CDEF": {
   
      "GroupData": {
       
        "OGF": {

         "@HQL":"HELLO",

         "J-KG" : "ABCDEF",
          "FRN": [
            100,    
            14,
            14,
            14,
            15
          ]
        }
      }
    }
}
}

What should be the code for printing the @HQL and J-KG data in the text field? Also, We are using JSONQL as language however with JSON the special symols like @  and - worked fine earlier. 

 

Regards,

Chintan

Link to comment
Share on other sites

Figured it out from the documentations... :)

 

<field name="FirstCustomerCompanyName" class="java.lang.String">  <propertyExpression name="net.sf.jasperreports.jsonql.field.expression"><![CDATA[ "$.Northwind.Customers[0]["Company Name"]" ]] ></propertyExpression>  <fieldDescription><![CDATA[ The company name of the first customer]] ></fieldDescription></field>

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...