Re: [WebDNA] JSONStore Levels

This WebDNA talk-list message is from

2020


It keeps the original formatting.
numero = 115095
interpreted = N
texte = 2724 --Apple-Mail=_AA63C384-7D6E-46BB-AD19-3D5964EF90DB Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 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: >=20 > Stuart, >=20 > 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. >=20 >=20 > Mike Davis >=20 >> On Apr 30, 2020, at 5:04 PM, talk@webdna.us = wrote: >>=20 >> I am not sure if this is exactly what Tom wrote, but it is what I am = using. >>=20 >>=20 >> [!]------------------- Pass json as JSONRESULT ----------------- >> ------------------- Conversion table to strip non-breaking spaces = ----------------- >> [/!][TABLE name=3DjsonClean&fields=3Dfrom,to] >> %C2=09 >> %A0=09 >> [/TABLE][!] >>=20 >> ------------------- Conversion table to facilitate spliting into = key:value pairs ----------------- >> [/!][TABLE name=3DjsonSplitConversions&fields=3Dfrom,to] >> |~~~~ >> \"^^^^ >> [/TABLE][!] >>=20 >> ------------------- Convert back after spliting into key:value pairs = ----------------- >> [/!][TABLE name=3DjsonSplitConversionsBack&fields=3Dfrom,to] >> "=09 >> ~~~~| >> ^^^^" >> [/TABLE][!] >>=20 >> ------------------- pass one - run the conversions ----------------- >> [/!][TEXT]JSONRESULT=3D[CONVERTWORDS = table=3DjsonSplitConversions][convertchars = table=3DjsonClean][JSONRESULT][/convertchars][/CONVERTWORDS][/TEXT][!] >>=20 >> ------------------- pass two - add bar to just before each key:value = pair ----------------- >> [/!][TEXT]JSONRESULT=3D[GREP = search=3D("[^"]*"):&replace=3D|\1=3D][JSONRESULT][/GREP][/TEXT][!] >>=20 >> ------------------- 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] >>=20 >>=20 >>=20 >>=20 >>=20 >> Kind regards >>=20 >> Stuart Tremain >> Pharoah Lane Software >> AUSTRALIA >> webdna@plsoftware.com.au >>=20 >>=20 >>=20 >>=20 >>=20 >>=20 >>=20 >>> On 1 May 2020, at 08:10, talk@webdna.us = wrote: >>>=20 >>> Hi Stuart, >>>=20 >>> I appreciate your answer and have a similar kludge (creative = solution) for my application. I was actually hoping to hear from Chris = on 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. >>>=20 >>> Chris, are there any parameters we can send that are not in the = documentation? >>>=20 >>>=20 >>>=20 >>> Thanks, >>> Mike Davis >>>=20 >>>> On Apr 22, 2020, at 5:05 PM, talk@webdna.us = wrote: >>>>=20 >>>> Hi MD >>>>=20 >>>> 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. >>>>=20 >>>> 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: >>>>=20 >>>>=20 >>>> [JSONstore table=3DTRANSACTION&fields=3Derror:type,error:message] >>>> [STRIPERESPONSE] >>>> [/JSONstore] >>>>=20 >>>> Then search the table: >>>>=20 >>>> [SEARCH table=3DTRANSACTION&neERROR:TYPEdatarq=3D[BLANK]][!] >>>> [/!][FOUNDITEMS][!] >>>> [/!][TEXT]ERROR-TYPE=3D[ERROR:TYPE][/TEXT][!] >>>> [/!][TEXT]ERROR-MESSAGE=3D[ERROR:MESSAGE][/TEXT][!] >>>> [/!][/FOUNDITEMS][!] >>>> [/!][/SEARCH] >>>>=20 >>>>=20 >>>> What I found to be a useful exercise was to write to my 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 >>>>=20 >>>> [JSONstore db=3Dlogs/stripelog.db] >>>> [STRIPERESPONSE] >>>> [/JSONstore] >>>>=20 >>>> As the data is often stored in an array you will have to do a bit = of manipulation on the found items. >>>>=20 >>>> Here is a JSON function that may be useful to you. >>>>=20 >>>>=20 >>>> = [!]---------------------------------------------------------------------- >>>> FUNCTION Name: WC-JSONvalue >>>> + Description: Pull out a value from a JSONobject >>>> + Input:=20 >>>> JSONobject =3D (the json to be parsed) - required >>>> JSONnode =3D (the node that we want the value of) - = required >>>> + usage: [WC-JSONvalue = JSONobject=3D[url][/url]&JSONnode=3D] >>>> +Note: This function MUST receive valid JSONobject, make sure = that there are no line breaks before beginning of JSON, test your JSON = validity 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][/te= xt][/showif][!] >>>> [/!][showif = [url][params_string][/url]^JSONnode][text]rJSONnode=3D[JSONnode][/text][/s= howif][!] >>>> -------------------- 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] >>>>=20 >>>> 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. >>>>=20 >>>>=20 >>>>=20 >>>>=20 >>>> Kind regards >>>>=20 >>>> Stuart Tremain >>>> Pharoah Lane Software >>>> AUSTRALIA >>>> webdna@plsoftware.com.au >>>>=20 >>>>=20 >>>>=20 >>>>=20 >>>>=20 >>>>=20 >>>>=20 >>>>> On 23 Apr 2020, at 06:45, talk@webdna.us = wrote: >>>>>=20 >>>>> Hi all, >>>>>=20 >>>>> I=E2=80=99m looking at the docs for the JSONStore context. It = seems that either the context is lacking functionality or the = documentation is. 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. Seems = like there should be a way to use dot notation to get at nested data = without storing each array in a temp db, then reparsing each level with = JSONStore into another temp db, etc. >>>>>=20 >>>>> For example: I want to iterate the data sets in the =E2=80=9Cresult= s=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 which I need to access data that is 3 or 4 = arrays deep. >>>>>=20 >>>>> Anyone solved this puzzle in a more efficient way yet? >>>>>=20 >>>>> { >>>>> "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 >>>>> } >>>>> ] >>>>> } >>>>>=20 >>>>>=20 >>>>>=20 >>>>>=20 >>>>> 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 >>>>=20 >>>> --------------------------------------------------------- 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.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 > --------------------------------------------------------- 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 --Apple-Mail=_AA63C384-7D6E-46BB-AD19-3D5964EF90DB Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 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







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







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 on 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 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
= + 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) - required
+ usage: = [WC-JSONvalue = JSONobject=3D[url]<the-json-object>[/url]&JSONnode=3D<the-jso= n-node>]
+Note: This function MUST receive = valid JSONobject, make sure that there are no line breaks before = beginning of JSON, test your JSON validity 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][/te= xt][/showif][!]
[/!][showif = [url][params_string][/url]^JSONnode][text]rJSONnode=3D[JSONnode][/text][/s= howif][!]
--------------------  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][!]<= /div>
= [/!][/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







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 seems that either the context is lacking = functionality or the documentation is.  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.  Seems like there should be a way to use = dot notation to get at nested data without storing each array in a temp = db, then reparsing each level with JSONStore into another temp db, = etc.

For example:  I want to iterate = the data sets in the =E2=80=9Cresults=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 which 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:[
=        {
=            "popular= ity":1.936,"vote_count=E2=80=9D:7
=        },
=        {
=            "popular= ity=E2=80=9D:2.732,"vote_count=E2=80=9D:23
=        },
=        {
=            "popular= ity=E2=80=9D:12.088,"vote_count=E2=80=9D:75
=        },
=        {
=            "popular= ity=E2=80=9D:53.221,"vote_count=E2=80=9D:5
=        },
=        {
=            "popular= ity=E2=80=9D:7.001,"vote_count=E2=80=9D:31
=        },
=        {
=            "popular= ity=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.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

--------------------------------------------------------- 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.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 --Apple-Mail=_AA63C384-7D6E-46BB-AD19-3D5964EF90DB-- . 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)
2724 --Apple-Mail=_AA63C384-7D6E-46BB-AD19-3D5964EF90DB Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 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: >=20 > Stuart, >=20 > 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. >=20 >=20 > Mike Davis >=20 >> On Apr 30, 2020, at 5:04 PM, talk@webdna.us = wrote: >>=20 >> I am not sure if this is exactly what Tom wrote, but it is what I am = using. >>=20 >>=20 >> [!]------------------- Pass json as JSONRESULT ----------------- >> ------------------- Conversion table to strip non-breaking spaces = ----------------- >> [/!][TABLE name=3DjsonClean&fields=3Dfrom,to] >> %C2=09 >> %A0=09 >> [/TABLE][!] >>=20 >> ------------------- Conversion table to facilitate spliting into = key:value pairs ----------------- >> [/!][TABLE name=3DjsonSplitConversions&fields=3Dfrom,to] >> |~~~~ >> \"^^^^ >> [/TABLE][!] >>=20 >> ------------------- Convert back after spliting into key:value pairs = ----------------- >> [/!][TABLE name=3DjsonSplitConversionsBack&fields=3Dfrom,to] >> "=09 >> ~~~~| >> ^^^^" >> [/TABLE][!] >>=20 >> ------------------- pass one - run the conversions ----------------- >> [/!][text]JSONRESULT=3D[CONVERTWORDS = table=3DjsonSplitConversions][convertchars = table=3DjsonClean][JSONRESULT][/convertchars][/CONVERTWORDS][/TEXT][!] >>=20 >> ------------------- pass two - add bar to just before each key:value = pair ----------------- >> [/!][text]JSONRESULT=3D[GREP = search=3D("[^"]*"):&replace=3D|\1=3D][JSONRESULT][/GREP][/TEXT][!] >>=20 >> ------------------- 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] >>=20 >>=20 >>=20 >>=20 >>=20 >> Kind regards >>=20 >> Stuart Tremain >> Pharoah Lane Software >> AUSTRALIA >> webdna@plsoftware.com.au >>=20 >>=20 >>=20 >>=20 >>=20 >>=20 >>=20 >>> On 1 May 2020, at 08:10, talk@webdna.us = wrote: >>>=20 >>> Hi Stuart, >>>=20 >>> I appreciate your answer and have a similar kludge (creative = solution) for my application. I was actually hoping to hear from Chris = on 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. >>>=20 >>> Chris, are there any parameters we can send that are not in the = documentation? >>>=20 >>>=20 >>>=20 >>> Thanks, >>> Mike Davis >>>=20 >>>> On Apr 22, 2020, at 5:05 PM, talk@webdna.us = wrote: >>>>=20 >>>> Hi MD >>>>=20 >>>> 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. >>>>=20 >>>> 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: >>>>=20 >>>>=20 >>>> [JSONstore table=3DTRANSACTION&fields=3Derror:type,error:message] >>>> [STRIPERESPONSE] >>>> [/JSONstore] >>>>=20 >>>> Then search the table: >>>>=20 >>>> [SEARCH table=3DTRANSACTION&neERROR:TYPEdatarq=3D[BLANK]][!] >>>> [/!][founditems][!] >>>> [/!][text]ERROR-TYPE=3D[ERROR:TYPE][/TEXT][!] >>>> [/!][text]ERROR-MESSAGE=3D[ERROR:MESSAGE][/TEXT][!] >>>> [/!][/FOUNDITEMS][!] >>>> [/!][/SEARCH] >>>>=20 >>>>=20 >>>> What I found to be a useful exercise was to write to my 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 >>>>=20 >>>> [JSONstore db=3Dlogs/stripelog.db] >>>> [STRIPERESPONSE] >>>> [/JSONstore] >>>>=20 >>>> As the data is often stored in an array you will have to do a bit = of manipulation on the found items. >>>>=20 >>>> Here is a JSON function that may be useful to you. >>>>=20 >>>>=20 >>>> = [!]---------------------------------------------------------------------- >>>> FUNCTION Name: WC-JSONvalue >>>> + Description: Pull out a value from a JSONobject >>>> + Input:=20 >>>> JSONobject =3D (the json to be parsed) - required >>>> JSONnode =3D (the node that we want the value of) - = required >>>> + usage: [WC-JSONvalue = JSONobject=3D[url][/url]&JSONnode=3D] >>>> +Note: This function MUST receive valid JSONobject, make sure = that there are no line breaks before beginning of JSON, test your JSON = validity 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][/te= xt][/showif][!] >>>> [/!][showif = [url][params_string][/url]^JSONnode][text]rJSONnode=3D[JSONnode][/text][/s= howif][!] >>>> -------------------- 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] >>>>=20 >>>> 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. >>>>=20 >>>>=20 >>>>=20 >>>>=20 >>>> Kind regards >>>>=20 >>>> Stuart Tremain >>>> Pharoah Lane Software >>>> AUSTRALIA >>>> webdna@plsoftware.com.au >>>>=20 >>>>=20 >>>>=20 >>>>=20 >>>>=20 >>>>=20 >>>>=20 >>>>> On 23 Apr 2020, at 06:45, talk@webdna.us = wrote: >>>>>=20 >>>>> Hi all, >>>>>=20 >>>>> I=E2=80=99m looking at the docs for the JSONStore context. It = seems that either the context is lacking functionality or the = documentation is. 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. Seems = like there should be a way to use dot notation to get at nested data = without storing each array in a temp db, then reparsing each level with = JSONStore into another temp db, etc. >>>>>=20 >>>>> For example: I want to iterate the data sets in the =E2=80=9Cresult= s=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 which I need to access data that is 3 or 4 = arrays deep. >>>>>=20 >>>>> Anyone solved this puzzle in a more efficient way yet? >>>>>=20 >>>>> { >>>>> "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 >>>>> } >>>>> ] >>>>> } >>>>>=20 >>>>>=20 >>>>>=20 >>>>>=20 >>>>> 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 >>>>=20 >>>> --------------------------------------------------------- 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.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 > --------------------------------------------------------- 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 --Apple-Mail=_AA63C384-7D6E-46BB-AD19-3D5964EF90DB Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 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







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







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 on 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]][!]
= [/!][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 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
= + 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) - required
+ usage: = [WC-JSONvalue = JSONobject=3D[url]<the-json-object>[/url]&JSONnode=3D<the-jso= n-node>]
+Note: This function MUST receive = valid JSONobject, make sure that there are no line breaks before = beginning of JSON, test your JSON validity 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][/te= xt][/showif][!]
[/!][showif = [url][params_string][/url]^JSONnode][text]rJSONnode=3D[JSONnode][/text][/s= howif][!]
--------------------  Store = the JSONobject in a table  --------------------
= [/!][JSONstore = table=3DJSONdata][rJSONobject][/jsonstore][!]
= --------------------  Search the table =  --------------------
= [/!][SEARCH = table=3DJSONdata&ne[rJSONnode]data=3Dfind_all][!]
= [/!][text]rRETURN=3D[interpret][[rJSONnode]][/interpret][/text][!]<= /div>
= [/!][/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







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 seems that either the context is lacking = functionality or the documentation is.  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.  Seems like there should be a way to use = dot notation to get at nested data without storing each array in a temp = db, then reparsing each level with JSONStore into another temp db, = etc.

For example:  I want to iterate = the data sets in the =E2=80=9Cresults=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 which 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:[
=        {
=            "popular= ity":1.936,"vote_count=E2=80=9D:7
=        },
=        {
=            "popular= ity=E2=80=9D:2.732,"vote_count=E2=80=9D:23
=        },
=        {
=            "popular= ity=E2=80=9D:12.088,"vote_count=E2=80=9D:75
=        },
=        {
=            "popular= ity=E2=80=9D:53.221,"vote_count=E2=80=9D:5
=        },
=        {
=            "popular= ity=E2=80=9D:7.001,"vote_count=E2=80=9D:31
=        },
=        {
=            "popular= ity=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.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

--------------------------------------------------------- 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.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 --Apple-Mail=_AA63C384-7D6E-46BB-AD19-3D5964EF90DB-- . Stuart Tremain

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:

WebCatalog2 Feature Feedback (1996) [sendmail] on NT? (1997) PCS Frames (1997) Need help on Shipping cost problem (2003) Emailer choke (1997) Problems with [Applescript] (1997) whole word search bringing irrelevant results.. (2000) [WebDNA] WebDNA code validator (2011) WebCat2b13MacPlugIn - [include] doesn't allow creator (1997) Locking up with WebCatalog... (1997) Security Question (1997) Instructions for Digest (1997) [referrer] tag (1997) Help w/Multi User Admins (1997) WebCatalog can't find database (1997) [WebDNA] proxy server domains mysteriously appear in webdna's domain list (2010) Bug or syntax error on my part? (1997) Signal Raised Error (1997) Can GMT be called from the OS ? (2004) Which GUI HTML editors work with WC ? (1997)