Re: [WebDNA] JSONStore Levels

This WebDNA talk-list message is from

2020


It keeps the original formatting.
numero = 115099
interpreted = N
texte = 2728 --000000000000ca20d005a4fac3dd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Chris, Hi - this would be great. Just two things to note: - Will the code work for nested arrays? - Will it allow for JSON that has colons - or any character - in the node names? My view would be that the closer the WebDNA behaviour matches the behaviour of Javscript the better. So looking at this: https://stackoverflow.com/questions/2577172/how-to-get-json-objects-value-i= f-its-name-contains-dots For the following JSON; var mydata =3D {"list": [ {"points.bean.pointsBase": [ {"time": 2000, "caption":"caption text", duration: 5000}, {"time": 6000, "caption":"caption text", duration: 3000} ] } ] } The time value in the first item of the array is extracted using: var smth =3D mydata.list[0]["points.bean.pointsBase"][0].time; I realise square brackets have special significance in WebDNA, but you get the idea. - Tom On Wed, 6 May 2020 at 08:24, wrote: > Hello everyone! > > > With Josh (who is behind all the C++ code these last years), we spent som= e > time thinking about this. He made a proof of concept C++ app that gives t= he > below output when we feed it the JSON from Mike's post to the mailing lis= t. > Is this useful? If this is acceptable, we can adapt the code into the > WebDNA source tree and have it store in the DB/table in that format. > > page=3D1 > total_results=3D21 > total_pages=3D1 > results:1:popularity=3D1.936 > results:1:vote_count=3D7 > results:2:popularity=3D2.732 > results:2:vote_count=3D23 > results:3:popularity=3D12.088 > results:3:vote_count=3D75 > results:4:popularity=3D53.221 > results:4:vote_count=3D5 > results:5:popularity=3D7.001 > results:5:vote_count=3D31 > results:6:popularity=3D22.223 > results:6:vote_count=3D88 > > Next version would have this fix built-in. > > - chris > > > > On May 1, 2020, at 06:03, talk@webdna.us wrote: > > > > Hi Mike. > > > > Ah yes, I can see why you need to do it natively. > > > > Sorry, I am out of silver bullets now :( > > > > > > Kind regards > > > > Stuart Tremain > > Pharoah Lane Software > > AUSTRALIA > > webdna@plsoftware.com.au > > > > > > > > > > > > > > > >> On 1 May 2020, at 12:52, talk@webdna.us wrote: > >> > >> Stuart, > >> > >> I actually use this (Tom=E2=80=99s routine) as the basis of what I=E2= =80=99m doing > now. The challenge I=E2=80=99m facing in my current project is that the = source > JSON is quite large, and the specific data I need is near the end of the > data, nested in several layers of arrays. The parsing time is around 90 > seconds. I need to speed that up. > >> > >> > >> Mike Davis > >> > >>> On Apr 30, 2020, at 5:04 PM, talk@webdna.us wrote: > >>> > >>> I am not sure if this is exactly what Tom wrote, but it is what I am > using. > >>> > >>> > >>> [!]------------------- Pass json as JSONRESULT ----------------- > >>> ------------------- Conversion table to strip non-breaking spaces > ----------------- > >>> [/!][TABLE name=3DjsonClean&fields=3Dfrom,to] > >>> %C2 > >>> %A0 > >>> [/TABLE][!] > >>> > >>> ------------------- Conversion table to facilitate spliting into > key:value pairs ----------------- > >>> [/!][TABLE name=3DjsonSplitConversions&fields=3Dfrom,to] > >>> | ~~~~ > >>> \" ^^^^ > >>> [/TABLE][!] > >>> > >>> ------------------- Convert back after spliting into key:value pairs > ----------------- > >>> [/!][TABLE name=3DjsonSplitConversionsBack&fields=3Dfrom,to] > >>> " > >>> ~~~~ | > >>> ^^^^ " > >>> [/TABLE][!] > >>> > >>> ------------------- pass one - run the conversions ----------------- > >>> [/!][TEXT]JSONRESULT=3D[CONVERTWORDS > table=3DjsonSplitConversions][convertchars > table=3DjsonClean][JSONRESULT][/convertchars][/CONVERTWORDS][/TEXT][!] > >>> > >>> ------------------- pass two - add bar to just before each key:value > pair ----------------- > >>> [/!][TEXT]JSONRESULT=3D[GREP > search=3D("[^"]*"):&replace=3D|\1=3D][JSONRESULT][/GREP][/TEXT][!] > >>> > >>> ------------------- pass three - list out the key:value pairs and > assign them to text variables ----------------- > >>> [/!][LISTWORDS words=3D[url][JSONRESULT][/url]&delimiters=3D|{}][!] > >>> [/!][TEXT]THISVAL=3D[GREP search=3D(,$)&replace=3D][GETCHARS > start=3D1&trim=3Dboth][CONVERTWORDS > table=3DjsonSplitConversionsBack][word][/CONVERTWORDS][/GETCHARS][/GREP][= /TEXT][!] > >>> [/!][HIDEIF [url][THISVAL][/url]=3D][!] > >>> [/!][TEXT]JSON-[THISVAL][/TEXT][!] > >>> [/!][/HIDEIF][!] > >>> [/!][/LISTWORDS] > >>> > >>> > >>> > >>> > >>> > >>> Kind regards > >>> > >>> Stuart Tremain > >>> Pharoah Lane Software > >>> AUSTRALIA > >>> webdna@plsoftware.com.au > >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>>> On 1 May 2020, at 08:10, talk@webdna.us wrote: > >>>> > >>>> Hi Stuart, > >>>> > >>>> I appreciate your answer and have a similar kludge (creative > solution) for my application. I was actually hoping to hear from Chris o= n > this, in hopes that the underlying JSON parser he is using can be passed > dot notation in a similar way that Javascript uses to parse JSON objects. > >>>> > >>>> Chris, are there any parameters we can send that are not in the > documentation? > >>>> > >>>> > >>>> > >>>> Thanks, > >>>> Mike Davis > >>>> > >>>>> On Apr 22, 2020, at 5:05 PM, talk@webdna.us wrote: > >>>>> > >>>>> Hi MD > >>>>> > >>>>> As we don=E2=80=99t know the email address of the sender anymore it= would be > nice for us to know who we are addressing. > >>>>> > >>>>> The JSONStore tag is a little confusing and what is also not well > documented is that you can store the data in a table eg: > >>>>> > >>>>> > >>>>> [JSONstore table=3DTRANSACTION&fields=3Derror:type,error:message] > >>>>> [STRIPERESPONSE] > >>>>> [/JSONstore] > >>>>> > >>>>> Then search the table: > >>>>> > >>>>> [SEARCH table=3DTRANSACTION&neERROR:TYPEdatarq=3D[BLANK]][!] > >>>>> [/!][FOUNDITEMS][!] > >>>>> [/!][TEXT]ERROR-TYPE=3D[ERROR:TYPE][/TEXT][!] > >>>>> [/!][TEXT]ERROR-MESSAGE=3D[ERROR:MESSAGE][/TEXT][!] > >>>>> [/!][/FOUNDITEMS][!] > >>>>> [/!][/SEARCH] > >>>>> > >>>>> > >>>>> What I found to be a useful exercise was to write to my specified d= b > and then open it and read the data to see what is being done with it. > JSONsStore will write the headers in a db > >>>>> > >>>>> [JSONstore db=3Dlogs/stripelog.db] > >>>>> [STRIPERESPONSE] > >>>>> [/JSONstore] > >>>>> > >>>>> As the data is often stored in an array you will have to do a bit o= f > manipulation on the found items. > >>>>> > >>>>> Here is a JSON function that may be useful to you. > >>>>> > >>>>> > >>>>> > [!]---------------------------------------------------------------------- > >>>>> FUNCTION Name: WC-JSONvalue > >>>>> + Description: Pull out a value from a JSONobject > >>>>> + Input: > >>>>> JSONobject =3D (the json to be parsed) - required > >>>>> JSONnode =3D (the node that we want the value of) - require= d > >>>>> + usage: [WC-JSONvalue > JSONobject=3D[url][/url]&JSONnode=3D] > >>>>> +Note: This function MUST receive valid JSONobject, make sure tha= t > there are no line breaks before beginning of JSON, test your JSON validit= y > here: https://jsonlint.com > >>>>> > ---------------------------------------------------------------------- > >>>>> [/!][function name=3DWC-JSONvalue][!] > >>>>> [/!][text]rRETURN=3D[/text][!] > >>>>> [/!][text]rJSONobject=3D[/text][!] > >>>>> [/!][text]rJSONnode=3Dnull[/text][!] > >>>>> [/!][showif > [url][params_string][/url]^JSONobject][text]rJSONobject=3D[JSONobject][/t= ext][/showif][!] > >>>>> [/!][showif > [url][params_string][/url]^JSONnode][text]rJSONnode=3D[JSONnode][/text][/= showif][!] > >>>>> -------------------- Store the JSONobject in a table > -------------------- > >>>>> [/!][JSONstore table=3DJSONdata][rJSONobject][/jsonstore][!] > >>>>> -------------------- Search the table -------------------- > >>>>> [/!][SEARCH table=3DJSONdata&ne[rJSONnode]data=3Dfind_all][!] > >>>>> [/!][founditems][!] > >>>>> > [/!][text]rRETURN=3D[interpret][[rJSONnode]][/interpret][/text][!] > >>>>> [/!][/founditems][!] > >>>>> [/!][/SEARCH][!] > >>>>> -------------------- Return the value -------------------- > >>>>> [/!][return][rRETURN][/return][!] > >>>>> [/!][/function] > >>>>> > >>>>> You man need to play around with the json object to ensure that it > is valid json, I found that PayPal json did not validate. > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> Kind regards > >>>>> > >>>>> Stuart Tremain > >>>>> Pharoah Lane Software > >>>>> AUSTRALIA > >>>>> webdna@plsoftware.com.au > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>> On 23 Apr 2020, at 06:45, talk@webdna.us wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> I=E2=80=99m looking at the docs for the JSONStore context. It see= ms that > either the context is lacking functionality or the documentation is. I d= o > not see a way to access nested levels in the JSON, like can be done with > XML using path=3D0:1:2 for example. Seems like there should be a way to = use > dot notation to get at nested data without storing each array in a temp d= b, > then reparsing each level with JSONStore into another temp db, etc. > >>>>>> > >>>>>> For example: I want to iterate the data sets in the =E2=80=9Cresu= lts=E2=80=9D > array into a database. I can use JSONStore to populate a table with the > fields: page, total_results, total_pages and results. Then I can search > that table and run JSONStore on the results field using another database, > but this gets a bit complicated when working with some other data, in whi= ch > I need to access data that is 3 or 4 arrays deep. > >>>>>> > >>>>>> Anyone solved this puzzle in a more efficient way yet? > >>>>>> > >>>>>> { > >>>>>> "page":1, > >>>>>> "total_results":21, > >>>>>> "total_pages":1, > >>>>>> "results=E2=80=9D:[ > >>>>>> { > >>>>>> "popularity":1.936,"vote_count=E2=80=9D:7 > >>>>>> }, > >>>>>> { > >>>>>> "popularity=E2=80=9D:2.732,"vote_count=E2=80=9D:23 > >>>>>> }, > >>>>>> { > >>>>>> "popularity=E2=80=9D:12.088,"vote_count=E2=80=9D:75 > >>>>>> }, > >>>>>> { > >>>>>> "popularity=E2=80=9D:53.221,"vote_count=E2=80=9D:5 > >>>>>> }, > >>>>>> { > >>>>>> "popularity=E2=80=9D:7.001,"vote_count=E2=80=9D:31 > >>>>>> }, > >>>>>> { > >>>>>> "popularity=E2=80=9D:22.223,"vote_count=E2=80=9D:88 > >>>>>> } > >>>>>> ] > >>>>>> } > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> MD--------------------------------------------------------- > >>>>>> This message is sent to you because you are subscribed to > >>>>>> the mailing list talk@webdna.us > >>>>>> To unsubscribe, E-mail to: talk-leave@webdna.us > >>>>>> archives: http://www.webdna.us/page.dna?numero=3D55 > >>>>>> Bug Reporting: support@webdna.us > >>>>> > >>>>> --------------------------------------------------------- This > message is sent to you because you are subscribed to the mailing list > talk@webdna.us To unsubscribe, E-mail to: talk-leave@webdna.us archives: > http://www.webdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.u= s > >>>> > >>>> --------------------------------------------------------- This > message is sent to you because you are subscribed to the mailing list > talk@webdna.us To unsubscribe, E-mail to: talk-leave@webdna.us archives: > http://www.webdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.u= s > >>> > >>> --------------------------------------------------------- This messag= e > is sent to you because you are subscribed to the mailing list > talk@webdna.us To unsubscribe, E-mail to: talk-leave@webdna.us archives: > http://www.webdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.u= s > >> > >> --------------------------------------------------------- This message > is sent to you because you are subscribed to the mailing list > talk@webdna.us To unsubscribe, E-mail to: talk-leave@webdna.us archives: > http://www.webdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.u= s > > > > --------------------------------------------------------- This message > is sent to you because you are subscribed to the mailing list > talk@webdna.us To unsubscribe, E-mail to: talk-leave@webdna.us archives: > http://www.webdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.u= s > > --------------------------------------------------------- > This message is sent to you because you are subscribed to > the mailing list talk@webdna.us > To unsubscribe, E-mail to: talk-leave@webdna.us > archives: http://www.webdna.us/page.dna?numero=3D55 > Bug Reporting: support@webdna.us > --000000000000ca20d005a4fac3dd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Chris,<= br clear=3D"all">

Hi - this would be great.=C2=A0 Just two thing= s to note:

  • Will the code work for nested a= rrays?
  • Will it allow for JSON that has colons - or any characte= r - in the node names?

My view would= be that the closer the WebDNA behaviour matches the behaviour of Javscript= the better.

So looking at this:
For the following JSON;

=
va= r mydata =3D =C2=A0=C2=A0
{"list"= ;: =C2=A0
=C2=A0 [ =C2=A0
=
=C2=A0 =C2=A0 {"points.bean.pointsBase": =C2=A0
<= /div>
=C2=A0 =C2=A0 =C2=A0 [ =C2=A0
<= /div>
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 {"time": 2000, "caption":"= ;caption text", duration: 5000}, =C2=A0
<= /div>
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 {"time": 6000, "caption":"= ;caption text", duration: 3000} =C2=A0
=C2= =A0 =C2=A0 =C2=A0 ] =C2=A0
=C2=A0 =C2=A0 } =C2= =A0
=C2=A0 ] =C2=A0
}=

The=C2=A0time value in the fi= rst item of the array is extracted using:

<= blockquote style=3D"margin:0 0 0 40px;border:none;padding:0px">
var smth =3D mydata.list[0]["points.bean.po= intsBase"][0].time;

I rea= lise square brackets have special significance=C2=A0in WebDNA, but you=C2= =A0get the=C2=A0idea.

- Tom


On Wed, 6 May 2020 at 08:24, <t= alk@webdna.us> wrote:
Hello everyone!


With Josh (who is behind all the C++ code these last years), we spent some = time thinking about this. He made a proof of concept C++ app that gives the= below output when we feed it the JSON from Mike's post to the mailing = list. Is this useful? If this is acceptable, we can adapt the code into the= WebDNA source tree and have it store in the DB/table in that format.

page=3D1
total_results=3D21
total_pages=3D1
results:1:popularity=3D1.936
results:1:vote_count=3D7
results:2:popularity=3D2.732
results:2:vote_count=3D23
results:3:popularity=3D12.088
results:3:vote_count=3D75
results:4:popularity=3D53.221
results:4:vote_count=3D5
results:5:popularity=3D7.001
results:5:vote_count=3D31
results:6:popularity=3D22.223
results:6:vote_count=3D88

Next version would have this fix built-in.

- chris


> On May 1, 2020, at 06:03, talk@webdna.us wrote:
>
> Hi Mike.
>
> Ah yes, I can see why you need to do it natively.
>
> Sorry, I am out of silver bullets now :(
>
>
> Kind regards
>
> Stuart Tremain
> Pharoah Lane Software
> AUSTRALIA
> webdna@p= lsoftware.com.au
>
>
>
>
>
>
>
>> On 1 May 2020, at 12:52, talk@webdna.us wrote:
>>
>> Stuart,
>>
>> I actually use this (Tom=E2=80=99s routine) as the basis of what I= =E2=80=99m doing now.=C2=A0 The challenge I=E2=80=99m facing in my current = project is that the source JSON is quite large, and the specific data I nee= d is near the end of the data, nested in several layers of arrays.=C2=A0 Th= e parsing time is around 90 seconds.=C2=A0 I need to speed that up.
>>
>>
>> Mike Davis
>>
>>> On Apr 30, 2020, at 5:04 PM, talk@webdna.us wrote:
>>>
>>> I am not sure if this is exactly what Tom wrote, but it is wha= t I am using.
>>>
>>>
>>> [!]------------------- Pass json as JSONRESULT ---------------= --
>>> ------------------- Conversion table to strip non-breaking spa= ces -----------------
>>> [/!][TABLE name=3DjsonClean&fields=3Dfrom,to]
>>> %C2
>>> %A0
>>> [/TABLE][!]
>>>
>>> ------------------- Conversion table to facilitate spliting in= to key:value pairs -----------------
>>> [/!][TABLE name=3DjsonSplitConversions&fields=3Dfrom,to] >>> |=C2=A0 =C2=A0~~~~
>>> \"=C2=A0 ^^^^
>>> [/TABLE][!]
>>>
>>> ------------------- Convert back after spliting into key:value= pairs -----------------
>>> [/!][TABLE name=3DjsonSplitConversionsBack&fields=3Dfrom,t= o]
>>> "=C2=A0 =C2=A0
>>> ~~~~=C2=A0 =C2=A0 =C2=A0 =C2=A0 |
>>> ^^^^=C2=A0 =C2=A0 =C2=A0 =C2=A0 "
>>> [/TABLE][!]
>>>
>>> ------------------- pass one - run the conversions -----------= ------
>>> [/!][TEXT]JSONRESULT=3D[CONVERTWORDS table=3DjsonSplitConversi= ons][convertchars table=3DjsonClean][JSONRESULT][/convertchars][/CONVERTWOR= DS][/TEXT][!]
>>>
>>> ------------------- pass two - add bar to just before each key= :value pair -----------------
>>> [/!][TEXT]JSONRESULT=3D[GREP search=3D("[^"]*")= :&replace=3D|\1=3D][JSONRESULT][/GREP][/TEXT][!]
>>>
>>> ------------------- pass three - list out the key:value pairs = and assign them to text variables -----------------
>>> [/!][LISTWORDS words=3D[url][JSONRESULT][/url]&delimiters= =3D|{}][!]
>>>=C2=A0 =C2=A0 =C2=A0[/!][TEXT]THISVAL=3D[GREP search=3D(,$)&= ;replace=3D][GETCHARS start=3D1&trim=3Dboth][CONVERTWORDS table=3DjsonS= plitConversionsBack][word][/CONVERTWORDS][/GETCHARS][/GREP][/TEXT][!]
>>>=C2=A0 =C2=A0 =C2=A0[/!][HIDEIF [url][THISVAL][/url]=3D][!]
>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0[/!][TEXT]JSON-= [THISVAL][/TEXT][!]
>>>=C2=A0 =C2=A0 =C2=A0[/!][/HIDEIF][!]
>>> [/!][/LISTWORDS]
>>>
>>>
>>>
>>>
>>>
>>> Kind regards
>>>
>>> Stuart Tremain
>>> Pharoah Lane Software
>>> AUSTRALIA
>>> = webdna@plsoftware.com.au
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>> On 1 May 2020, at 08:10, talk@webdna.us wrote:
>>>>
>>>> Hi Stuart,
>>>>
>>>> I appreciate your answer and have a similar kludge (creati= ve solution) for my application.=C2=A0 I was actually hoping to hear from C= hris on this, in hopes that the underlying JSON parser he is using can be p= assed dot notation in a similar way that Javascript uses to parse JSON obje= cts.
>>>>
>>>> Chris, are there any parameters we can send that are not i= n the documentation?
>>>>
>>>>
>>>>
>>>> Thanks,
>>>> Mike Davis
>>>>
>>>>> On Apr 22, 2020, at 5:05 PM, talk@webdna.us wrote:
>>>>>
>>>>> Hi MD
>>>>>
>>>>> As we don=E2=80=99t know the email address of the send= er anymore it would be nice for us to know who we are addressing.
>>>>>
>>>>> The JSONStore tag is a little confusing and what is al= so not well documented is that you can store the data in a table eg:
>>>>>
>>>>>
>>>>> [JSONstore table=3DTRANSACTION&fields=3Derror:type= ,error:message]
>>>>> [STRIPERESPONSE]
>>>>> [/JSONstore]
>>>>>
>>>>> Then search the table:
>>>>>
>>>>> [SEARCH table=3DTRANSACTION&neERROR:TYPEdatarq=3D[= BLANK]][!]
>>>>>=C2=A0 =C2=A0[/!][FOUNDITEMS][!]
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0[/!][TEXT]ERRO= R-TYPE=3D[ERROR:TYPE][/TEXT][!]
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0[/!][TEXT]ERRO= R-MESSAGE=3D[ERROR:MESSAGE][/TEXT][!]
>>>>>=C2=A0 =C2=A0[/!][/FOUNDITEMS][!]
>>>>> [/!][/SEARCH]
>>>>>
>>>>>
>>>>> What I found to be a useful exercise was to write to m= y specified db and then open it and read the data to see what is being done= with it. JSONsStore will write the headers in a db
>>>>>
>>>>> [JSONstore db=3Dlogs/stripelog.db]
>>>>> [STRIPERESPONSE]
>>>>> [/JSONstore]
>>>>>
>>>>> As the data is often stored in an array you will have = to do a bit of manipulation on the found items.
>>>>>
>>>>> Here is a JSON function that may be useful to you.
>>>>>
>>>>>
>>>>> [!]---------------------------------------------------= -------------------
>>>>> FUNCTION Name: WC-JSONvalue
>>>>>=C2=A0 =C2=A0+ Description: Pull out a value from a JSO= Nobject
>>>>>=C2=A0 =C2=A0+ Input:
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0JSONobject =3D (the j= son to be parsed) - required
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0JSONnode =3D (the nod= e that we want the value of) - required
>>>>>=C2=A0 =C2=A0+ usage: [WC-JSONvalue JSONobject=3D[url]&= lt;the-json-object>[/url]&JSONnode=3D<the-json-node>]
>>>>>=C2=A0 =C2=A0+Note: This function MUST receive valid JS= ONobject, make sure that there are no line breaks before beginning of JSON,= test your JSON validity here: https://jsonlint.com
>>>>> ------------------------------------------------------= ----------------
>>>>> [/!][function name=3DWC-JSONvalue][!]
>>>>>=C2=A0 =C2=A0[/!][text]rRETURN=3D[/text][!]
>>>>>=C2=A0 =C2=A0[/!][text]rJSONobject=3D[/text][!]
>>>>>=C2=A0 =C2=A0[/!][text]rJSONnode=3Dnull[/text][!]
>>>>>=C2=A0 =C2=A0[/!][showif [url][params_string][/url]^JSO= Nobject][text]rJSONobject=3D[JSONobject][/text][/showif][!]
>>>>>=C2=A0 =C2=A0[/!][showif [url][params_string][/url]^JSO= Nnode][text]rJSONnode=3D[JSONnode][/text][/showif][!]
>>>>>=C2=A0 =C2=A0--------------------=C2=A0 Store the JSONo= bject in a table=C2=A0 --------------------
>>>>>=C2=A0 =C2=A0[/!][JSONstore table=3DJSONdata][rJSONobje= ct][/jsonstore][!]
>>>>>=C2=A0 =C2=A0--------------------=C2=A0 Search the tabl= e=C2=A0 --------------------
>>>>>=C2=A0 =C2=A0[/!][SEARCH table=3DJSONdata&ne[rJSONn= ode]data=3Dfind_all][!]
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0[/!][founditem= s][!]
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0[/!][text]rRETURN=3D[interpret][[rJSONnode]][/interpret][/tex= t][!]
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0[/!][/foundite= ms][!]
>>>>>=C2=A0 =C2=A0[/!][/SEARCH][!]
>>>>>=C2=A0 =C2=A0--------------------=C2=A0 Return the valu= e=C2=A0 --------------------
>>>>>=C2=A0 =C2=A0[/!][return][rRETURN][/return][!]
>>>>> [/!][/function]
>>>>>
>>>>> You man need to play around with the json object to en= sure that it is valid json, I found that PayPal json did not validate.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Kind regards
>>>>>
>>>>> Stuart Tremain
>>>>> Pharoah Lane Software
>>>>> AUSTRALIA
>>>>> webdna@plsoftware.com.au
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> On 23 Apr 2020, at 06:45, talk@webdna.us wrote:
>>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> I=E2=80=99m looking at the docs for the JSONStore = context.=C2=A0 It seems that either the context is lacking functionality or= the documentation is.=C2=A0 I do not see a way to access nested levels in = the JSON, like can be done with XML using path=3D0:1:2 for example.=C2=A0 S= eems like there should be a way to use dot notation to get at nested data w= ithout storing each array in a temp db, then reparsing each level with JSON= Store into another temp db, etc.
>>>>>>
>>>>>> For example:=C2=A0 I want to iterate the data sets= in the =E2=80=9Cresults=E2=80=9D array into a database.=C2=A0 I can use JS= ONStore to populate a table with the fields: page, total_results, total_pag= es and results.=C2=A0 =C2=A0Then I can search that table and run JSONStore = on the results field using another database, but this gets a bit complicate= d when working with some other data, in which I need to access data that is= 3 or 4 arrays deep.
>>>>>>
>>>>>> Anyone solved this puzzle in a more efficient way = yet?
>>>>>>
>>>>>> {
>>>>>>=C2=A0 =C2=A0 "page":1,
>>>>>>=C2=A0 =C2=A0 "total_results":21,
>>>>>>=C2=A0 =C2=A0 "total_pages":1,
>>>>>>=C2=A0 =C2=A0 "results=E2=80=9D:[
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pop= ularity":1.936,"vote_count=E2=80=9D:7
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 },
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pop= ularity=E2=80=9D:2.732,"vote_count=E2=80=9D:23
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 },
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pop= ularity=E2=80=9D:12.088,"vote_count=E2=80=9D:75
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 },
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pop= ularity=E2=80=9D:53.221,"vote_count=E2=80=9D:5
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 },
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pop= ularity=E2=80=9D:7.001,"vote_count=E2=80=9D:31
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 },
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pop= ularity=E2=80=9D:22.223,"vote_count=E2=80=9D:88
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 }
>>>>>>=C2=A0 =C2=A0 ]
>>>>>> }
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> MD------------------------------------------------= ---------
>>>>>> This message is sent to you because you are subscr= ibed to
>>>>>> the mailing list talk@webdna.us
>>>>>> To unsubscribe, E-mail to: talk-leave@webdna.us
>>>>>> archives: http://www.webdna.us/pag= e.dna?numero=3D55
>>>>>> Bug Reporting: support@webdna.us
>>>>>
>>>>> ------------------------------------------------------= --- This message is sent to you because you are subscribed to the mailing l= ist talk@webdna.us = To unsubscribe, E-mail to: talk-leave@webdna.us archives: http://www.w= ebdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.us
>>>>
>>>> --------------------------------------------------------- = This message is sent to you because you are subscribed to the mailing list = talk@webdna.us To u= nsubscribe, E-mail to: talk-leave@webdna.us archives: http://www.webdna.= us/page.dna?numero=3D55 Bug Reporting: support@webdna.us
>>>
>>> --------------------------------------------------------- This= message is sent to you because you are subscribed to the mailing list talk@webdna.us To unsub= scribe, E-mail to: talk-leave@webdna.us archives: http://www.webdna.us/p= age.dna?numero=3D55 Bug Reporting: support@webdna.us
>>
>> --------------------------------------------------------- This mes= sage is sent to you because you are subscribed to the mailing list talk@webdna.us To unsubscr= ibe, E-mail to: t= alk-leave@webdna.us archives: http://www.webdna.us/page= ..dna?numero=3D55 Bug Reporting: support@webdna.us
>
> --------------------------------------------------------- This message= is sent to you because you are subscribed to the mailing list talk@webdna.us To unsubscribe, = E-mail to: talk-l= eave@webdna.us archives: http://www.webdna.us/page.dna?= numero=3D55 Bug Reporting: support@webdna.us

---------------------------------------------------------
This message is sent to you because you are subscribed to
the mailing list talk@w= ebdna.us
To unsubscribe, E-mail to: talk-leave@webdna.us
archives: http://www.webdna.us/page.dna?numero=3D55
Bug Reporting: suppo= rt@webdna.us
--------------------------------------------------------- This message is sent to you because you are subscribed to the mailing list talk@webdna.us To unsubscribe, E-mail to: talk-leave@webdna.us archives: http://www.webdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.us --000000000000ca20d005a4fac3dd-- . Associated Messages, from the most recent to the oldest:

    
  1. Re: [WebDNA] JSONStore Levels (Stuart Tremain 2020)
  2. Re: [WebDNA] JSONStore Levels (Tom Duke 2020)
  3. Re: [WebDNA] JSONStore Levels (christophe.billiottet@webdna.us 2020)
  4. Re: [WebDNA] JSONStore Levels (Tom Duke 2020)
  5. Re: [WebDNA] JSONStore Levels (christophe.billiottet@webdna.us 2020)
  6. Re: [WebDNA] JSONStore Levels (christophe.billiottet@webdna.us 2020)
  7. Re: [WebDNA] JSONStore Levels (Michael Davis 2020)
  8. Re: [WebDNA] JSONStore Levels (Tom Duke 2020)
  9. Re: [WebDNA] JSONStore Levels (Michael Davis 2020)
  10. Re: [WebDNA] JSONStore Levels (Tom Duke 2020)
  11. Re: [WebDNA] JSONStore Levels (Stuart Tremain 2020)
  12. Re: [WebDNA] JSONStore Levels (christophe.billiottet@webdna.us 2020)
  13. RE: [WebDNA] JSONStore Levels ("Scott @ Itsula" 2020)
  14. Re: [WebDNA] JSONStore Levels (Stuart Tremain 2020)
  15. Re: [WebDNA] JSONStore Levels (Michael Davis 2020)
  16. Re: [WebDNA] JSONStore Levels (Stuart Tremain 2020)
  17. Re: [WebDNA] JSONStore Levels (Stuart Tremain 2020)
  18. Re: [WebDNA] JSONStore Levels (Michael Davis 2020)
  19. Re: [WebDNA] JSONStore Levels (Stuart Tremain 2020)
  20. [WebDNA] JSONStore Levels (Michael Davis 2020)
2728 --000000000000ca20d005a4fac3dd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Chris, Hi - this would be great. Just two things to note: - Will the code work for nested arrays? - Will it allow for JSON that has colons - or any character - in the node names? My view would be that the closer the WebDNA behaviour matches the behaviour of Javscript the better. So looking at this: https://stackoverflow.com/questions/2577172/how-to-get-json-objects-value-i= f-its-name-contains-dots For the following JSON; var mydata =3D {"list": [ {"points.bean.pointsBase": [ {"time": 2000, "caption":"caption text", duration: 5000}, {"time": 6000, "caption":"caption text", duration: 3000} ] } ] } The time value in the first item of the array is extracted using: var smth =3D mydata.list[0]["points.bean.pointsBase"][0].time; I realise square brackets have special significance in WebDNA, but you get the idea. - Tom On Wed, 6 May 2020 at 08:24, wrote: > Hello everyone! > > > With Josh (who is behind all the C++ code these last years), we spent som= e > time thinking about this. He made a proof of concept C++ app that gives t= he > below output when we feed it the JSON from Mike's post to the mailing lis= t. > Is this useful? If this is acceptable, we can adapt the code into the > WebDNA source tree and have it store in the DB/table in that format. > > page=3D1 > total_results=3D21 > total_pages=3D1 > results:1:popularity=3D1.936 > results:1:vote_count=3D7 > results:2:popularity=3D2.732 > results:2:vote_count=3D23 > results:3:popularity=3D12.088 > results:3:vote_count=3D75 > results:4:popularity=3D53.221 > results:4:vote_count=3D5 > results:5:popularity=3D7.001 > results:5:vote_count=3D31 > results:6:popularity=3D22.223 > results:6:vote_count=3D88 > > Next version would have this fix built-in. > > - chris > > > > On May 1, 2020, at 06:03, talk@webdna.us wrote: > > > > Hi Mike. > > > > Ah yes, I can see why you need to do it natively. > > > > Sorry, I am out of silver bullets now :( > > > > > > Kind regards > > > > Stuart Tremain > > Pharoah Lane Software > > AUSTRALIA > > webdna@plsoftware.com.au > > > > > > > > > > > > > > > >> On 1 May 2020, at 12:52, talk@webdna.us wrote: > >> > >> Stuart, > >> > >> I actually use this (Tom=E2=80=99s routine) as the basis of what I=E2= =80=99m doing > now. The challenge I=E2=80=99m facing in my current project is that the = source > JSON is quite large, and the specific data I need is near the end of the > data, nested in several layers of arrays. The parsing time is around 90 > seconds. I need to speed that up. > >> > >> > >> Mike Davis > >> > >>> On Apr 30, 2020, at 5:04 PM, talk@webdna.us wrote: > >>> > >>> I am not sure if this is exactly what Tom wrote, but it is what I am > using. > >>> > >>> > >>> [!]------------------- Pass json as JSONRESULT ----------------- > >>> ------------------- Conversion table to strip non-breaking spaces > ----------------- > >>> [/!][TABLE name=3DjsonClean&fields=3Dfrom,to] > >>> %C2 > >>> %A0 > >>> [/TABLE][!] > >>> > >>> ------------------- Conversion table to facilitate spliting into > key:value pairs ----------------- > >>> [/!][TABLE name=3DjsonSplitConversions&fields=3Dfrom,to] > >>> | ~~~~ > >>> \" ^^^^ > >>> [/TABLE][!] > >>> > >>> ------------------- Convert back after spliting into key:value pairs > ----------------- > >>> [/!][TABLE name=3DjsonSplitConversionsBack&fields=3Dfrom,to] > >>> " > >>> ~~~~ | > >>> ^^^^ " > >>> [/TABLE][!] > >>> > >>> ------------------- pass one - run the conversions ----------------- > >>> [/!][text]JSONRESULT=3D[CONVERTWORDS > table=3DjsonSplitConversions][convertchars > table=3DjsonClean][JSONRESULT][/convertchars][/CONVERTWORDS][/TEXT][!] > >>> > >>> ------------------- pass two - add bar to just before each key:value > pair ----------------- > >>> [/!][text]JSONRESULT=3D[GREP > search=3D("[^"]*"):&replace=3D|\1=3D][JSONRESULT][/GREP][/TEXT][!] > >>> > >>> ------------------- pass three - list out the key:value pairs and > assign them to text variables ----------------- > >>> [/!][LISTWORDS words=3D[url][JSONRESULT][/url]&delimiters=3D|{}][!] > >>> [/!][text]THISVAL=3D[GREP search=3D(,$)&replace=3D][GETCHARS > start=3D1&trim=3Dboth][CONVERTWORDS > table=3DjsonSplitConversionsBack][word][/CONVERTWORDS][/GETCHARS][/GREP][= /TEXT][!] > >>> [/!][HIDEIF [url][THISVAL][/url]=3D][!] > >>> [/!][text]JSON-[THISVAL][/TEXT][!] > >>> [/!][/HIDEIF][!] > >>> [/!][/LISTWORDS] > >>> > >>> > >>> > >>> > >>> > >>> Kind regards > >>> > >>> Stuart Tremain > >>> Pharoah Lane Software > >>> AUSTRALIA > >>> webdna@plsoftware.com.au > >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>>> On 1 May 2020, at 08:10, talk@webdna.us wrote: > >>>> > >>>> Hi Stuart, > >>>> > >>>> I appreciate your answer and have a similar kludge (creative > solution) for my application. I was actually hoping to hear from Chris o= n > this, in hopes that the underlying JSON parser he is using can be passed > dot notation in a similar way that Javascript uses to parse JSON objects. > >>>> > >>>> Chris, are there any parameters we can send that are not in the > documentation? > >>>> > >>>> > >>>> > >>>> Thanks, > >>>> Mike Davis > >>>> > >>>>> On Apr 22, 2020, at 5:05 PM, talk@webdna.us wrote: > >>>>> > >>>>> Hi MD > >>>>> > >>>>> As we don=E2=80=99t know the email address of the sender anymore it= would be > nice for us to know who we are addressing. > >>>>> > >>>>> The JSONStore tag is a little confusing and what is also not well > documented is that you can store the data in a table eg: > >>>>> > >>>>> > >>>>> [JSONstore table=3DTRANSACTION&fields=3Derror:type,error:message] > >>>>> [STRIPERESPONSE] > >>>>> [/JSONstore] > >>>>> > >>>>> Then search the table: > >>>>> > >>>>> [SEARCH table=3DTRANSACTION&neERROR:TYPEdatarq=3D[BLANK]][!] > >>>>> [/!][founditems][!] > >>>>> [/!][text]ERROR-TYPE=3D[ERROR:TYPE][/TEXT][!] > >>>>> [/!][text]ERROR-MESSAGE=3D[ERROR:MESSAGE][/TEXT][!] > >>>>> [/!][/FOUNDITEMS][!] > >>>>> [/!][/SEARCH] > >>>>> > >>>>> > >>>>> What I found to be a useful exercise was to write to my specified d= b > and then open it and read the data to see what is being done with it. > JSONsStore will write the headers in a db > >>>>> > >>>>> [JSONstore db=3Dlogs/stripelog.db] > >>>>> [STRIPERESPONSE] > >>>>> [/JSONstore] > >>>>> > >>>>> As the data is often stored in an array you will have to do a bit o= f > manipulation on the found items. > >>>>> > >>>>> Here is a JSON function that may be useful to you. > >>>>> > >>>>> > >>>>> > [!]---------------------------------------------------------------------- > >>>>> FUNCTION Name: WC-JSONvalue > >>>>> + Description: Pull out a value from a JSONobject > >>>>> + Input: > >>>>> JSONobject =3D (the json to be parsed) - required > >>>>> JSONnode =3D (the node that we want the value of) - require= d > >>>>> + usage: [WC-JSONvalue > JSONobject=3D[url][/url]&JSONnode=3D] > >>>>> +Note: This function MUST receive valid JSONobject, make sure tha= t > there are no line breaks before beginning of JSON, test your JSON validit= y > here: https://jsonlint.com > >>>>> > ---------------------------------------------------------------------- > >>>>> [/!][function name=3DWC-JSONvalue][!] > >>>>> [/!][text]rRETURN=3D[/text][!] > >>>>> [/!][text]rJSONobject=3D[/text][!] > >>>>> [/!][text]rJSONnode=3Dnull[/text][!] > >>>>> [/!][showif > [url][params_string][/url]^JSONobject][text]rJSONobject=3D[JSONobject][/t= ext][/showif][!] > >>>>> [/!][showif > [url][params_string][/url]^JSONnode][text]rJSONnode=3D[JSONnode][/text][/= showif][!] > >>>>> -------------------- Store the JSONobject in a table > -------------------- > >>>>> [/!][JSONstore table=3DJSONdata][rJSONobject][/jsonstore][!] > >>>>> -------------------- Search the table -------------------- > >>>>> [/!][SEARCH table=3DJSONdata&ne[rJSONnode]data=3Dfind_all][!] > >>>>> [/!][founditems][!] > >>>>> > [/!][text]rRETURN=3D[interpret][[rJSONnode]][/interpret][/text][!] > >>>>> [/!][/founditems][!] > >>>>> [/!][/SEARCH][!] > >>>>> -------------------- Return the value -------------------- > >>>>> [/!][return][rRETURN][/return][!] > >>>>> [/!][/function] > >>>>> > >>>>> You man need to play around with the json object to ensure that it > is valid json, I found that PayPal json did not validate. > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> Kind regards > >>>>> > >>>>> Stuart Tremain > >>>>> Pharoah Lane Software > >>>>> AUSTRALIA > >>>>> webdna@plsoftware.com.au > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>> On 23 Apr 2020, at 06:45, talk@webdna.us wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> I=E2=80=99m looking at the docs for the JSONStore context. It see= ms that > either the context is lacking functionality or the documentation is. I d= o > not see a way to access nested levels in the JSON, like can be done with > XML using path=3D0:1:2 for example. Seems like there should be a way to = use > dot notation to get at nested data without storing each array in a temp d= b, > then reparsing each level with JSONStore into another temp db, etc. > >>>>>> > >>>>>> For example: I want to iterate the data sets in the =E2=80=9Cresu= lts=E2=80=9D > array into a database. I can use JSONStore to populate a table with the > fields: page, total_results, total_pages and results. Then I can search > that table and run JSONStore on the results field using another database, > but this gets a bit complicated when working with some other data, in whi= ch > I need to access data that is 3 or 4 arrays deep. > >>>>>> > >>>>>> Anyone solved this puzzle in a more efficient way yet? > >>>>>> > >>>>>> { > >>>>>> "page":1, > >>>>>> "total_results":21, > >>>>>> "total_pages":1, > >>>>>> "results=E2=80=9D:[ > >>>>>> { > >>>>>> "popularity":1.936,"vote_count=E2=80=9D:7 > >>>>>> }, > >>>>>> { > >>>>>> "popularity=E2=80=9D:2.732,"vote_count=E2=80=9D:23 > >>>>>> }, > >>>>>> { > >>>>>> "popularity=E2=80=9D:12.088,"vote_count=E2=80=9D:75 > >>>>>> }, > >>>>>> { > >>>>>> "popularity=E2=80=9D:53.221,"vote_count=E2=80=9D:5 > >>>>>> }, > >>>>>> { > >>>>>> "popularity=E2=80=9D:7.001,"vote_count=E2=80=9D:31 > >>>>>> }, > >>>>>> { > >>>>>> "popularity=E2=80=9D:22.223,"vote_count=E2=80=9D:88 > >>>>>> } > >>>>>> ] > >>>>>> } > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> MD--------------------------------------------------------- > >>>>>> This message is sent to you because you are subscribed to > >>>>>> the mailing list talk@webdna.us > >>>>>> To unsubscribe, E-mail to: talk-leave@webdna.us > >>>>>> archives: http://www.webdna.us/page.dna?numero=3D55 > >>>>>> Bug Reporting: support@webdna.us > >>>>> > >>>>> --------------------------------------------------------- This > message is sent to you because you are subscribed to the mailing list > talk@webdna.us To unsubscribe, E-mail to: talk-leave@webdna.us archives: > http://www.webdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.u= s > >>>> > >>>> --------------------------------------------------------- This > message is sent to you because you are subscribed to the mailing list > talk@webdna.us To unsubscribe, E-mail to: talk-leave@webdna.us archives: > http://www.webdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.u= s > >>> > >>> --------------------------------------------------------- This messag= e > is sent to you because you are subscribed to the mailing list > talk@webdna.us To unsubscribe, E-mail to: talk-leave@webdna.us archives: > http://www.webdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.u= s > >> > >> --------------------------------------------------------- This message > is sent to you because you are subscribed to the mailing list > talk@webdna.us To unsubscribe, E-mail to: talk-leave@webdna.us archives: > http://www.webdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.u= s > > > > --------------------------------------------------------- This message > is sent to you because you are subscribed to the mailing list > talk@webdna.us To unsubscribe, E-mail to: talk-leave@webdna.us archives: > http://www.webdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.u= s > > --------------------------------------------------------- > This message is sent to you because you are subscribed to > the mailing list talk@webdna.us > To unsubscribe, E-mail to: talk-leave@webdna.us > archives: http://www.webdna.us/page.dna?numero=3D55 > Bug Reporting: support@webdna.us > --000000000000ca20d005a4fac3dd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Chris,<= br clear=3D"all">

Hi - this would be great.=C2=A0 Just two thing= s to note:

  • Will the code work for nested a= rrays?
  • Will it allow for JSON that has colons - or any characte= r - in the node names?

My view would= be that the closer the WebDNA behaviour matches the behaviour of Javscript= the better.

So looking at this:
For the following JSON;

=
va= r mydata =3D =C2=A0=C2=A0
{"list"= ;: =C2=A0
=C2=A0 [ =C2=A0
=
=C2=A0 =C2=A0 {"points.bean.pointsBase": =C2=A0
<= /div>
=C2=A0 =C2=A0 =C2=A0 [ =C2=A0
<= /div>
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 {"time": 2000, "caption":"= ;caption text", duration: 5000}, =C2=A0
<= /div>
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 {"time": 6000, "caption":"= ;caption text", duration: 3000} =C2=A0
=C2= =A0 =C2=A0 =C2=A0 ] =C2=A0
=C2=A0 =C2=A0 } =C2= =A0
=C2=A0 ] =C2=A0
}=

The=C2=A0time value in the fi= rst item of the array is extracted using:

<= blockquote style=3D"margin:0 0 0 40px;border:none;padding:0px">
var smth =3D mydata.list[0]["points.bean.po= intsBase"][0].time;

I rea= lise square brackets have special significance=C2=A0in WebDNA, but you=C2= =A0get the=C2=A0idea.

- Tom


On Wed, 6 May 2020 at 08:24, <t= alk@webdna.us> wrote:
Hello everyone!


With Josh (who is behind all the C++ code these last years), we spent some = time thinking about this. He made a proof of concept C++ app that gives the= below output when we feed it the JSON from Mike's post to the mailing = list. Is this useful? If this is acceptable, we can adapt the code into the= WebDNA source tree and have it store in the DB/table in that format.

page=3D1
total_results=3D21
total_pages=3D1
results:1:popularity=3D1.936
results:1:vote_count=3D7
results:2:popularity=3D2.732
results:2:vote_count=3D23
results:3:popularity=3D12.088
results:3:vote_count=3D75
results:4:popularity=3D53.221
results:4:vote_count=3D5
results:5:popularity=3D7.001
results:5:vote_count=3D31
results:6:popularity=3D22.223
results:6:vote_count=3D88

Next version would have this fix built-in.

- chris


> On May 1, 2020, at 06:03, talk@webdna.us wrote:
>
> Hi Mike.
>
> Ah yes, I can see why you need to do it natively.
>
> Sorry, I am out of silver bullets now :(
>
>
> Kind regards
>
> Stuart Tremain
> Pharoah Lane Software
> AUSTRALIA
> webdna@p= lsoftware.com.au
>
>
>
>
>
>
>
>> On 1 May 2020, at 12:52, talk@webdna.us wrote:
>>
>> Stuart,
>>
>> I actually use this (Tom=E2=80=99s routine) as the basis of what I= =E2=80=99m doing now.=C2=A0 The challenge I=E2=80=99m facing in my current = project is that the source JSON is quite large, and the specific data I nee= d is near the end of the data, nested in several layers of arrays.=C2=A0 Th= e parsing time is around 90 seconds.=C2=A0 I need to speed that up.
>>
>>
>> Mike Davis
>>
>>> On Apr 30, 2020, at 5:04 PM, talk@webdna.us wrote:
>>>
>>> I am not sure if this is exactly what Tom wrote, but it is wha= t I am using.
>>>
>>>
>>> [!]------------------- Pass json as JSONRESULT ---------------= --
>>> ------------------- Conversion table to strip non-breaking spa= ces -----------------
>>> [/!][TABLE name=3DjsonClean&fields=3Dfrom,to]
>>> %C2
>>> %A0
>>> [/TABLE][!]
>>>
>>> ------------------- Conversion table to facilitate spliting in= to key:value pairs -----------------
>>> [/!][TABLE name=3DjsonSplitConversions&fields=3Dfrom,to] >>> |=C2=A0 =C2=A0~~~~
>>> \"=C2=A0 ^^^^
>>> [/TABLE][!]
>>>
>>> ------------------- Convert back after spliting into key:value= pairs -----------------
>>> [/!][TABLE name=3DjsonSplitConversionsBack&fields=3Dfrom,t= o]
>>> "=C2=A0 =C2=A0
>>> ~~~~=C2=A0 =C2=A0 =C2=A0 =C2=A0 |
>>> ^^^^=C2=A0 =C2=A0 =C2=A0 =C2=A0 "
>>> [/TABLE][!]
>>>
>>> ------------------- pass one - run the conversions -----------= ------
>>> [/!][text]JSONRESULT=3D[CONVERTWORDS table=3DjsonSplitConversi= ons][convertchars table=3DjsonClean][JSONRESULT][/convertchars][/CONVERTWOR= DS][/TEXT][!]
>>>
>>> ------------------- pass two - add bar to just before each key= :value pair -----------------
>>> [/!][text]JSONRESULT=3D[GREP search=3D("[^"]*")= :&replace=3D|\1=3D][JSONRESULT][/GREP][/TEXT][!]
>>>
>>> ------------------- pass three - list out the key:value pairs = and assign them to text variables -----------------
>>> [/!][LISTWORDS words=3D[url][JSONRESULT][/url]&delimiters= =3D|{}][!]
>>>=C2=A0 =C2=A0 =C2=A0[/!][text]THISVAL=3D[GREP search=3D(,$)&= ;replace=3D][GETCHARS start=3D1&trim=3Dboth][CONVERTWORDS table=3DjsonS= plitConversionsBack][word][/CONVERTWORDS][/GETCHARS][/GREP][/TEXT][!]
>>>=C2=A0 =C2=A0 =C2=A0[/!][HIDEIF [url][THISVAL][/url]=3D][!]
>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0[/!][text]JSON-= [THISVAL][/TEXT][!]
>>>=C2=A0 =C2=A0 =C2=A0[/!][/HIDEIF][!]
>>> [/!][/LISTWORDS]
>>>
>>>
>>>
>>>
>>>
>>> Kind regards
>>>
>>> Stuart Tremain
>>> Pharoah Lane Software
>>> AUSTRALIA
>>> = webdna@plsoftware.com.au
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>> On 1 May 2020, at 08:10, talk@webdna.us wrote:
>>>>
>>>> Hi Stuart,
>>>>
>>>> I appreciate your answer and have a similar kludge (creati= ve solution) for my application.=C2=A0 I was actually hoping to hear from C= hris on this, in hopes that the underlying JSON parser he is using can be p= assed dot notation in a similar way that Javascript uses to parse JSON obje= cts.
>>>>
>>>> Chris, are there any parameters we can send that are not i= n the documentation?
>>>>
>>>>
>>>>
>>>> Thanks,
>>>> Mike Davis
>>>>
>>>>> On Apr 22, 2020, at 5:05 PM, talk@webdna.us wrote:
>>>>>
>>>>> Hi MD
>>>>>
>>>>> As we don=E2=80=99t know the email address of the send= er anymore it would be nice for us to know who we are addressing.
>>>>>
>>>>> The JSONStore tag is a little confusing and what is al= so not well documented is that you can store the data in a table eg:
>>>>>
>>>>>
>>>>> [JSONstore table=3DTRANSACTION&fields=3Derror:type= ,error:message]
>>>>> [STRIPERESPONSE]
>>>>> [/JSONstore]
>>>>>
>>>>> Then search the table:
>>>>>
>>>>> [SEARCH table=3DTRANSACTION&neERROR:TYPEdatarq=3D[= BLANK]][!]
>>>>>=C2=A0 =C2=A0[/!][founditems][!]
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0[/!][text]ERRO= R-TYPE=3D[ERROR:TYPE][/TEXT][!]
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0[/!][text]ERRO= R-MESSAGE=3D[ERROR:MESSAGE][/TEXT][!]
>>>>>=C2=A0 =C2=A0[/!][/FOUNDITEMS][!]
>>>>> [/!][/SEARCH]
>>>>>
>>>>>
>>>>> What I found to be a useful exercise was to write to m= y specified db and then open it and read the data to see what is being done= with it. JSONsStore will write the headers in a db
>>>>>
>>>>> [JSONstore db=3Dlogs/stripelog.db]
>>>>> [STRIPERESPONSE]
>>>>> [/JSONstore]
>>>>>
>>>>> As the data is often stored in an array you will have = to do a bit of manipulation on the found items.
>>>>>
>>>>> Here is a JSON function that may be useful to you.
>>>>>
>>>>>
>>>>> [!]---------------------------------------------------= -------------------
>>>>> FUNCTION Name: WC-JSONvalue
>>>>>=C2=A0 =C2=A0+ Description: Pull out a value from a JSO= Nobject
>>>>>=C2=A0 =C2=A0+ Input:
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0JSONobject =3D (the j= son to be parsed) - required
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0JSONnode =3D (the nod= e that we want the value of) - required
>>>>>=C2=A0 =C2=A0+ usage: [WC-JSONvalue JSONobject=3D[url]&= lt;the-json-object>[/url]&JSONnode=3D<the-json-node>]
>>>>>=C2=A0 =C2=A0+Note: This function MUST receive valid JS= ONobject, make sure that there are no line breaks before beginning of JSON,= test your JSON validity here: https://jsonlint.com
>>>>> ------------------------------------------------------= ----------------
>>>>> [/!][function name=3DWC-JSONvalue][!]
>>>>>=C2=A0 =C2=A0[/!][text]rRETURN=3D[/text][!]
>>>>>=C2=A0 =C2=A0[/!][text]rJSONobject=3D[/text][!]
>>>>>=C2=A0 =C2=A0[/!][text]rJSONnode=3Dnull[/text][!]
>>>>>=C2=A0 =C2=A0[/!][showif [url][params_string][/url]^JSO= Nobject][text]rJSONobject=3D[JSONobject][/text][/showif][!]
>>>>>=C2=A0 =C2=A0[/!][showif [url][params_string][/url]^JSO= Nnode][text]rJSONnode=3D[JSONnode][/text][/showif][!]
>>>>>=C2=A0 =C2=A0--------------------=C2=A0 Store the JSONo= bject in a table=C2=A0 --------------------
>>>>>=C2=A0 =C2=A0[/!][JSONstore table=3DJSONdata][rJSONobje= ct][/jsonstore][!]
>>>>>=C2=A0 =C2=A0--------------------=C2=A0 Search the tabl= e=C2=A0 --------------------
>>>>>=C2=A0 =C2=A0[/!][SEARCH table=3DJSONdata&ne[rJSONn= ode]data=3Dfind_all][!]
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0[/!][founditem= s][!]
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0[/!][text]rRETURN=3D[interpret][[rJSONnode]][/interpret][/tex= t][!]
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0[/!][/foundite= ms][!]
>>>>>=C2=A0 =C2=A0[/!][/SEARCH][!]
>>>>>=C2=A0 =C2=A0--------------------=C2=A0 Return the valu= e=C2=A0 --------------------
>>>>>=C2=A0 =C2=A0[/!][return][rRETURN][/return][!]
>>>>> [/!][/function]
>>>>>
>>>>> You man need to play around with the json object to en= sure that it is valid json, I found that PayPal json did not validate.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Kind regards
>>>>>
>>>>> Stuart Tremain
>>>>> Pharoah Lane Software
>>>>> AUSTRALIA
>>>>> webdna@plsoftware.com.au
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> On 23 Apr 2020, at 06:45, talk@webdna.us wrote:
>>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> I=E2=80=99m looking at the docs for the JSONStore = context.=C2=A0 It seems that either the context is lacking functionality or= the documentation is.=C2=A0 I do not see a way to access nested levels in = the JSON, like can be done with XML using path=3D0:1:2 for example.=C2=A0 S= eems like there should be a way to use dot notation to get at nested data w= ithout storing each array in a temp db, then reparsing each level with JSON= Store into another temp db, etc.
>>>>>>
>>>>>> For example:=C2=A0 I want to iterate the data sets= in the =E2=80=9Cresults=E2=80=9D array into a database.=C2=A0 I can use JS= ONStore to populate a table with the fields: page, total_results, total_pag= es and results.=C2=A0 =C2=A0Then I can search that table and run JSONStore = on the results field using another database, but this gets a bit complicate= d when working with some other data, in which I need to access data that is= 3 or 4 arrays deep.
>>>>>>
>>>>>> Anyone solved this puzzle in a more efficient way = yet?
>>>>>>
>>>>>> {
>>>>>>=C2=A0 =C2=A0 "page":1,
>>>>>>=C2=A0 =C2=A0 "total_results":21,
>>>>>>=C2=A0 =C2=A0 "total_pages":1,
>>>>>>=C2=A0 =C2=A0 "results=E2=80=9D:[
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pop= ularity":1.936,"vote_count=E2=80=9D:7
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 },
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pop= ularity=E2=80=9D:2.732,"vote_count=E2=80=9D:23
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 },
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pop= ularity=E2=80=9D:12.088,"vote_count=E2=80=9D:75
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 },
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pop= ularity=E2=80=9D:53.221,"vote_count=E2=80=9D:5
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 },
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pop= ularity=E2=80=9D:7.001,"vote_count=E2=80=9D:31
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 },
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "pop= ularity=E2=80=9D:22.223,"vote_count=E2=80=9D:88
>>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 }
>>>>>>=C2=A0 =C2=A0 ]
>>>>>> }
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> MD------------------------------------------------= ---------
>>>>>> This message is sent to you because you are subscr= ibed to
>>>>>> the mailing list talk@webdna.us
>>>>>> To unsubscribe, E-mail to: talk-leave@webdna.us
>>>>>> archives: http://www.webdna.us/pag= e.dna?numero=3D55
>>>>>> Bug Reporting: support@webdna.us
>>>>>
>>>>> ------------------------------------------------------= --- This message is sent to you because you are subscribed to the mailing l= ist talk@webdna.us = To unsubscribe, E-mail to: talk-leave@webdna.us archives: http://www.w= ebdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.us
>>>>
>>>> --------------------------------------------------------- = This message is sent to you because you are subscribed to the mailing list = talk@webdna.us To u= nsubscribe, E-mail to: talk-leave@webdna.us archives: http://www.webdna.= us/page.dna?numero=3D55 Bug Reporting: support@webdna.us
>>>
>>> --------------------------------------------------------- This= message is sent to you because you are subscribed to the mailing list talk@webdna.us To unsub= scribe, E-mail to: talk-leave@webdna.us archives: http://www.webdna.us/p= age.dna?numero=3D55 Bug Reporting: support@webdna.us
>>
>> --------------------------------------------------------- This mes= sage is sent to you because you are subscribed to the mailing list talk@webdna.us To unsubscr= ibe, E-mail to: t= alk-leave@webdna.us archives: http://www.webdna.us/page= ..dna?numero=3D55 Bug Reporting: support@webdna.us
>
> --------------------------------------------------------- This message= is sent to you because you are subscribed to the mailing list talk@webdna.us To unsubscribe, = E-mail to: talk-l= eave@webdna.us archives: http://www.webdna.us/page.dna?= numero=3D55 Bug Reporting: support@webdna.us

---------------------------------------------------------
This message is sent to you because you are subscribed to
the mailing list talk@w= ebdna.us
To unsubscribe, E-mail to: talk-leave@webdna.us
archives: http://www.webdna.us/page.dna?numero=3D55
Bug Reporting: suppo= rt@webdna.us
--------------------------------------------------------- This message is sent to you because you are subscribed to the mailing list talk@webdna.us To unsubscribe, E-mail to: talk-leave@webdna.us archives: http://www.webdna.us/page.dna?numero=3D55 Bug Reporting: support@webdna.us --000000000000ca20d005a4fac3dd-- . Tom Duke

DOWNLOAD WEBDNA NOW!

Top Articles:

Talk List

The WebDNA community talk-list is the best place to get some help: several hundred extremely proficient programmers with an excellent knowledge of WebDNA and an excellent spirit will deliver all the tips and tricks you can imagine...

Related Readings:

searchable list archive (1997) Another bug to squash (WebCat2b13 Mac .acgi) (1997) Saving/Looking Up customer numbers (1998) Extended [ConvertChars] (1997) Hiring: Web programmer in Seattle area (2000) ShowNext Command (1997) [WebDNA] Linix v 6.2 Server (2013) Math Function (1997) Non Standard Product Display Layout (2000) WebCat b13 CGI -shownext- (1997) Emailer (WebCat2) (1997) Re:Emailer and encryption (1997) Limiting user access to .tmpl files (1997) Help! WebCat2 bug (1997) Caching [include] files ... (1997) any suggestions for creating a multi-lingual site? (1999) Problems searching from a FORM (1997) nesting limits? (1998) well... (1997) WebMerchant 1.6 and SHTML (1997)