Hi Joao, I just double double checked and it turned out I was wrong :-/ I was thinking of a capability that we have in some of the other DataContext implementations (MongoDb I think) to make such column names that represent nested fields. But I can see that this does not work for JSON in our current implementation.
That is however an improvement I feel is quite important. So I've registered an issue for it [1] at least ... In the meantime, the way forward is to get "name" and then cast the value to a Map and get "first" and "last" from that map. Best regards, Kasper [1] https://issues.apache.org/jira/browse/METAMODEL-92 2014-11-07 16:41 GMT+01:00 Joao Boto <[email protected]>: > i'm trying to understand how to read a complex json file.. > > i started with this json (but will work with a much more complex): > { > "name":{ "first":"Joe", "last":"Sixpack" }, > "gender":"MALE", > "verified":false, > "userImage":"Rm9vYmFyIQ==" > } > > trying to do what Kasper told me on > https://issues.apache.org/jira/browse/METAMODEL-38 > > I wrote the code below, but i can't get "first" and "last" fields.. > > SimpleTableDef custTable = new SimpleTableDef( > "customer", > new String[] {"name.first","name.last","gender","verified","userimage"} > ); > > SchemaBuilder schema = new SimpleTableDefSchemaBuilder("tester", custTable) > ; > JsonDataContext dc = new JsonDataContext(new FileResource(new > File("src/test/resources/datafeed.json")),schema); > Table table = dc.getDefaultSchema().getTableByName("customer"); > Column firstName = table.getColumnByName("name.first"); > Column lastName = table.getColumnByName("name.last"); > Column gender = table.getColumnByName("gender"); > DataSet dataSet = > dc.query().from(table).select(firstName,lastName,gender).execute(); > while (dataSet.next()) { > String sFirstName = (String) dataSet.getRow().getValue(firstName); > String sLastName = (String) dataSet.getRow().getValue(lastName); > String sGender = (String) dataSet.getRow().getValue(gender); > } > > can someone tell me what I'm doing wrong or indicate which way to go? > > thanks > > Best regards >
