A basic integration could support a few basic things like:

- Getting a value at a position in an array would be the only useful thing such 
a syntax should support, I'd say:
author.articles[0]

- Iterating over such an array would be supported without any need for array 
notation, since JSONArray is already Iterable:
<t:loop t:source="json:author.articles" t:value="article">
        ${json:article.title}
</t:loop>

- The guarding '?' could be useful. It could not only guard against missing 
members but also against missing elements in the array:
author?.articles[1]

Parsing the expression might be quite expensive if the solution is just 
string-manipulation-based. The way the regular properties are resolved (all 
this stuff around antlr) is faster than any string-tokenizing, right?


Case-insensitivity: 
I would say only the Tapestry properties. Everyone knows which case the 
properties should be, since in most cases that you need a JSON the function 
that receives it is not case-insensitive. Javascript libraries, JSON-centric 
databases… 


Regarding the "simple mapping from JSONObject to normal Object": 
We're using Jackson(http://jackson.codehaus.org) to map objects from MongoDB to 
POJOs (using a wrapping library for that 
https://github.com/vznet/mongo-jackson-mapper).
Now it's getting pretty complex. But in general: would you prefer such mapper 
over reinventing the json-mapping-wheel? It would mean another dependency but I 
think it would be worth it.



Am 27.07.2012 um 20:19 schrieb Howard Lewis Ship:

> Time allowing, an optional sub-project of Tapestry.
> 
> The hard part is coming up with a format that works well with Tapestry;
> 
> I suppose we could just treat the first key name in the property path
> as a JavaBean property, i.e.
> 
> user.address.line1
> 
> would expect there to be a
> 
> public JSONObject getUser() { ... }
> 
> on the class; the JSONObject would contain key "address", and sub-key "line1".
> 
> A proper syntax should give some option for supporting nested JSONArrays.
> 
> In addition, is only the Tapestry property case-insensitive, or do we
> make the keys inside the JSONObjects case insensitive as well?
> 
> I've also been thinking of a simple mapping from JSONObject to normal
> Object, with annotated fields and/or naming conventions. So you might
> pass a JSONObject to a service and get back an Object that you can
> then use with Tapestry.
> 
> 
> On Fri, Jul 27, 2012 at 11:13 AM, Christian Riedel
> <cr.ml...@googlemail.com> wrote:
>> So what do you think? Should something like that go into tapestry-core or 
>> into some 3rd party library?
>> 
>> 
>> Am 27.07.2012 um 19:35 schrieb Howard Lewis Ship:
>> 
>>> Some form of json: binding prefix will be invaluable as we move from
>>> Java-centric ORMs such as Hibernate to JSON-centric databases such as
>>> MongoDB and CouchDB (or, perhaps, even Datomic).
>>> 
>>> On Fri, Jul 27, 2012 at 5:57 AM, Christian Riedel
>>> <cr.ml...@googlemail.com> wrote:
>>>> This might be solved using a custom PropertyBinding and should look like 
>>>> ${json:property.name}…
>>>> Challenge accepted!
>>>> 
>>>> https://gist.github.com/3187796
>>>> 
>>>> 
>>>> Am 27.07.2012 um 02:16 schrieb Angelo C.:
>>>> 
>>>>> Hi,
>>>>> 
>>>>> you have this in the code,
>>>>> 
>>>>> public JSONObject getJS() {
>>>>>     JSONObject js = new JSONObject();
>>>>>     js.put("name1","123");
>>>>>     return js;
>>>>> }
>>>>> 
>>>>> then in the template:
>>>>> ${js.get('name1')}
>>>>> 
>>>>> considering json objects are used often nowadays, possible to have a 
>>>>> direct
>>>>> support in template? maybe some other prefix like:
>>>>> #{js.name1}
>>>>> 
>>>>> what do you think?
>>>>> 
>>>>> Angelo
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> View this message in context: 
>>>>> http://tapestry.1045711.n5.nabble.com/json-support-in-template-tp5714820.html
>>>>> Sent from the Tapestry - User mailing list archive at Nabble.com.
>>>>> 
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>>> 
>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> Howard M. Lewis Ship
>>> 
>>> Creator of Apache Tapestry
>>> 
>>> The source for Tapestry training, mentoring and support. Contact me to
>>> learn how I can get you up and productive in Tapestry fast!
>>> 
>>> (971) 678-5210
>>> http://howardlewisship.com
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>> 
> 
> 
> 
> -- 
> Howard M. Lewis Ship
> 
> Creator of Apache Tapestry
> 
> The source for Tapestry training, mentoring and support. Contact me to
> learn how I can get you up and productive in Tapestry fast!
> 
> (971) 678-5210
> http://howardlewisship.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to