raval.chintan Posted June 22, 2020 Share Posted June 22, 2020 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 moreCaused 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 moreCaused 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. RegardsChintan Link to comment Share on other sites More sharing options...
Solution narcism Posted June 22, 2020 Solution Share Posted June 22, 2020 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 More sharing options...
raval.chintan Posted June 23, 2020 Author Share Posted June 23, 2020 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 More sharing options...
raval.chintan Posted June 23, 2020 Author Share Posted June 23, 2020 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now