Hi Chris,

AJAX:
> Yeah actually I think it's normally sufficient to let the user use jquery
> ajax as usual but just provide easy functions to unmarshal/marshal into the
> format they need where ever they need it.  It reduces the size of the plugin
> and I've sort of found most ajax-convenience functions in plugins aren't
> exactly what I need so I end up not using them anyway.  Not always true
> though and if you think there some benefit I really don't feel very strongly
> either way (just playing devils advocate.)


We need not re-invent the wheel. I think it would be fair to assume users of
this plugin will have a certain amount of experience and would be quite
capable (and would probably prefer) to write their own ajax calls, like
this...
$.get(url2xml, function(response){
 var json = $.xml2json(response);
 // do stuff
});

Having said that, it would be very easy to assume that an ajax call is
required when a function is sent in one of the parameters, for example:
$.xml2json(url2xml, function(json){
 // do stuff
});
... which doesn't really save (or cost) much time (or code) but it provides
a simple little hook for Ajax calls. :-D

FORMAT:
> Where it really became an issue in a production environment was that I
> always had to test every 'element' to see if i needed to treat it as an
> array or object.  And every time I started to rely on it being an {} or [],
> there was some corner case that came up gave me the other and the code
> broke.  This is especially true in templates.
>

OK, my current implementation allows you to choose between 2 formats:
simple - arrays when necessary
extended - always use arrays
...isn't that enough to solve the problem of not knowing what to expect? In
your case for example, just use extended mode and you're good to go. I just
can't see a scenario where the user of this plubing would insist of choosing
specific formatting options for different 'branches'... Am I being
un-reasonble?

Serialization/De-serialization:

I see what you're saying and it seems great. I'd have to figure out how to
make this work, but I have had an idea which might just do the job. In the
documentation, I wrote a script that goes through the json object and
represents it in HTML. That same script could be used to create a 'map' of
the json structure. This map could be an array OR maybe even better, a
simple string with the path ("reference") to every node in the structure.
Something like this:

Consider this XML:
<house>
 <kitchen>
  <dishwasher>RED</dishwasher>
  <fridge>WHITE</fridge>
  <telly>24 INCH</telly>
 </kitchen>
 <lounge>
  <sofa>BROWN</sofa>
  <telly>50 INCH</telly>
 </lounge>
</house>

Which would result in the following map...
JSON MAP: [
 "kitchen", "kitchen.dishwasher", "kitchen.fridge", "kitchen.telly",
  "lounge", "lounge.sofa", "lounge.telly"
]

That way we could come up with some xpath-like markup to search through
nodes just like you suggested...
json.find('dishwasher') // gives us array with nodes kitchen.dishwasher
json.find('dvd') // gives us an empty array
json.find('telly') // gives us array with nodes kitchen.telly and
lounge.telly.

$.each(json.find('telly'), function(i, node){
 // 1st - kitchen.telly node
 // 2nd - lounge.telly node
});

How does that sound???

Cheers,
Diego A.

2008/7/15 chris thatcher <[EMAIL PROTECTED]>:

>
>
> On Tue, Jul 15, 2008 at 10:18 AM, Diego <[EMAIL PROTECTED]> wrote:
>
>>
>> Hi Chris,
>>
>> I'd be glad to work on this with you. Unfortunately, I'm completely
>> tied up with a couple of other projects for the next few days. I won't
>> have a chance to work on the next version, but I'll let I know as soon
>> as I make some changes.
>>
> Same boat here so we can organize a little then push forward.
>
>
>>
>>
>> AJAX:
>> Although I released this as a jQuery plugin, it doesn't actually make
>> any use of jQuery functionality, other than the $.each function. But
>> as you suggested, it does make sense to integrate it with jQuery a bit
>> further and to include ajax.
>>
> Yeah actually I think it's normally sufficient to let the user use jquery
> ajax as usual but just provide easy functions to unmarshal/marshal into the
> format they need where ever they need it.  It reduces the size of the plugin
> and I've sort of found most ajax-convenience functions in plugins aren't
> exactly what I need so I end up not using them anyway.  Not always true
> though and if you think there some benefit I really don't feel very strongly
> either way (just playing devils advocate.)
>
>
>> FORMAT:
>> As far as formatting is concerned, I understand that you'd like the
>> output to follow a certain format, but is this really something that
>> is worth working on? Isn't what I've got at the moment enough, ie.:
>> use arrays only when necessary OR always use arrays. Is there really a
>> need to specify which nodes should be arrays and which shouldn't?
>
> Where it really became an issue in a production environment was that I
> always had to test every 'element' to see if i needed to treat it as an
> array or object.  And every time I started to rely on it being an {} or [],
> there was some corner case that came up gave me the other and the code
> broke.  This is especially true in templates.
>
>>
>>
>> Serialization/De-serialization:
>> I like the idea (like the firefox about:config page), but what affect
>> would this have on memory? ie.: by doing this, wouldn't we essentially
>> double memory usage by storing every value in data['a.b.c'] as well as
>> data.a.b.c?
>>
> They are actually different objects so you'ld have myJsonObject.a.b.c and
> myRejosnObject['a.b.c'].  Normally how I use it is I only use json form in
> code, but marshal to/from the rejson  when serializing to/from sqlite, and
> marshal to/from the xml form when serializing to/from the server. But this
> was just my use case.  In general the idea is that only one form is present
> in memory at a time, but it's easy to move between them when I need to.  So
> if I wanted to provide a nice table to edit an object, I could retreive that
> object as rejson from the db and I'd just leave it in the same form or if it
> came as xml from the server I'd marshal directly to rejson, skip json, and
> delete the xml footprint.  In the end I think the marshalling performance is
> what we focus on and let the user decide when they need delete objects.
>
> Just some thoughts.  I'll try to clean up some older example code.  I also
> think it might be worth thinking about how Ariels jquery.collections and
> something like jspath could be used to provide some more jquery-like,
> e4x-ish approach so we could have
>
> var data = jqE4X(xml);//basically marshals to json
> jqE4X('a..c', data).each(function(){
>   //etc gives us an array of all decendants 'c' of data.a
> });
>
> Or is this not at all what you have in mind?
>
> Thatcher
>
>
>> Again, thank you for your interest in this project. I look forward to
>> your reply...
>>
>> Cheers,
>> Diego A.
>>
>> On Jul 8, 12:11 am, "chris thatcher" <[EMAIL PROTECTED]>
>> wrote:
>> > yeah it would be great to see it ported to a jQuery plugin in
>> combination
>> > with your work and then you could actually use jQuery ajax and it would
>> be
>> > cleaner.  I've used it a lot and for me the big thing is the ability to
>> easy
>> > set what elements are treated as array's even if only one is present
>> > (because it keeps the code using it simpler, less cases), and specifying
>> the
>> > attribute prefix (I use '@') because I can basically use e4x like
>> syntax.
>> >
>> > I also made a modification to xotree locally to allow a flat
>> > serialization/deserialization so that the item becomes a list of
>> name/value
>> > objects, the name being the 'javascript path' eg '[EMAIL PROTECTED]' and
>> the
>> > value is the simple value.  This was extremely useful for fast
>> development
>> > with GoogleGears because I could have a generic table for all objects
>> and
>> > use the powerful 'name LIKE' queries to find objects stored in the db.
>> >
>> > I'd love to help you develop this or give feedback because it would also
>> > help promote some mvc stuff I'm build for the jQ community.
>> >
>> > Thatcher
>> >
>> >
>> >
>> > On Mon, Jul 7, 2008 at 6:59 PM, Diego <[EMAIL PROTECTED]> wrote:
>> >
>> > > Hi Chris,
>> >
>> > > I hadn't seen xotree before, but I found it...
>> > >http://www.kawa.net/works/js/xml/objtree-e.html
>> > > ...and looking at the examples, it seems to behave exactly like my
>> > > plugin but it's more flexible with options and built-in ajax support.
>> >
>> > > It's definitelly a good base for future development of my plugin...
>> >
>> > > Cheers,
>> > > Diego A.
>> >
>> > > On Jul 7, 8:10 pm, "chris thatcher" <[EMAIL PROTECTED]>
>> > > wrote:
>> > > > Have you looked at xotree.js ?  Nice work.
>> >
>> > > > On Mon, Jul 7, 2008 at 10:30 AM, Alexsandro_xpt <[EMAIL PROTECTED]
>> >
>> > > wrote:
>> >
>> > > > > Hi Diego,
>> >
>> > > > > I mean ( 1 )
>> >
>> > > > > I Know, but would be something like that
>> <xml><person><name>Diego</
>> > > > > name></person></xml> already great. :)
>> >
>> > > > > Nice plugin.!!
>> >
>> > > > > On 5 jul, 00:06, Diego <[EMAIL PROTECTED]> wrote:
>> > > > > > Hi Alexsandro,
>> >
>> > > > > > Do you mean....
>> > > > > > (1)"convert the generate JSON back to XML"?
>> > > > > > OR...
>> > > > > > (2)"define a javascript object and convert it to XML"?
>> >
>> > > > > > If (1):
>> > > > > > I initially built this plugin for my personal use (for my
>> > > > > > "convenience") so I could easily process XML data. Because of
>> that, I
>> > > > > > didn't bother to differentiate between attributes / nodes. ie.:
>> > > > > > <xml><person><name>Diego</name></person></xml>
>> > > > > > ...gives the same output as this...
>> > > > > > <xml><person name="Diego"></person></xml>
>> > > > > > ...so it would be impossible to "reverse the conversion".
>> >
>> > > > > > If (2):
>> > > > > > This is quite easy. And actually, it would be pretty similar to
>> the
>> > > > > > code I wrote to show the JSON structure in HTML (Under Examples
>> >
>> > > > > > Basic/Extended Structure)
>> >
>> > > > > > I will write this when I get a chance, but I'd rather wait for
>> the
>> > > > > > feedback on this plugin to work out the best way to do it...
>> >
>> > > > > > Cheers,
>> > > > > > Diego
>> >
>> > > > > > Alexsandro_xpt wrote:
>> > > > > > > Very good!!!
>> >
>> > > > > > > Are possible to do reverse?
>> >
>> > > > > > > --
>> > > > > > > Alexsandro
>> > > > > > >www.alexsandro.com.br
>> >
>> > > > > > > On 4 jul, 12:34, Diego <[EMAIL PROTECTED]> wrote:
>> > > > > > > > I wrote this a few months but didn't have the time to share
>> it.
>> > > Now
>> > > > > > > > that I've re-done the documentation for 2 of my plugins I
>> thought
>> > > I'd
>> > > > > > > > give it a few hours, knock some examples together and share
>> it
>> > > with
>> > > > > > > > the whole world (ok, maybe just a few people).
>> >
>> > > > > > > > Basic example:
>> > > > > > > > var xml = '<xml><message>Hello world</message></xml>';
>> > > > > > > > var json = $.xml2json(xml);
>> > > > > > > > alert(json.message); // shows "Hello world"
>> >
>> > > > > > > > Ajax example:
>> > > > > > > > var file = 'data/hello.xml'; //<xml><message>Hello
>> > > world</message></
>> > > > > > > > xml>
>> > > > > > > > $.get(file, function(xml){
>> > > > > > > > �var json = $.xml2json(xml);
>> > > > > > > > �alert(json.message);
>> >
>> > > > > > > > });
>> >
>> > > > > > > > See the documentation page for more examples and demos.
>> > > > > > > > XML to JSON Plugin -
>> http://fyneworks.com/jquery/xml-to-json/
>> >
>> > > > > > > > As always, feedback is welcome!
>> >
>> > > > > > > > Cheers,
>> > > > > > > > Diego
>> >
>> > > > --
>> > > > Christopher Thatcher
>> >
>> > --
>> > Christopher Thatcher
>>
>
>
>
> --
> Christopher Thatcher




-- 
Cheers,
Diego A.

Reply via email to