Ok now I solved the layout problem too. Recap: First: pass the JsonDataSource to the filler directly without calling subDataSet method: JsonDataSource jds = new JsonDataSource(inputStream);JasperPrint report = JasperFillManager.fillReport(compiled,parameters, jds); [/code] Second: use these expression in the main report to define the subreport <subreport><reportElement x="0" y="0" width="555" height="100" uuid="3f4dece2-5563-4df9-9cda-15623e0f6127"/><dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("json.Peoples")]]></dataSourceExpression><subreportExpression><![CDATA[$P{SUBREPORT_OBJ}]]></subreportExpression></subreport>[/code]The parameter SUBREPORT_OBJ is there because I'm compiling the subereport's .jrxml in my java application so I pass the subreport to the main report as an object. Normally we define a path for the .jasper of the subreport but in my project I do all the work at runtime. Third: in the sub report jrxml file put the fields into the detail band and get rid of the <querystring> tag (I'm not sure of this, but because I'm doing the selection into the main report, I deleted that tag and It works.... ) These steps worked for me. I hope will be useful for other people.