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
> <[email protected]> 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
>>> <[email protected]> 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: [email protected]
>>>>> For additional commands, e-mail: [email protected]
>>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>>
>>>
>>>
>>>
>>> --
>>> 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: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>
>
>
> --
> 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: [email protected]
> For additional commands, e-mail: [email protected]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]