Re: [WebDNA] JSONStore Levels

This WebDNA talk-list message is from

2020


It keeps the original formatting.
numero = 115094
interpreted = N
texte = 2723 --Apple-Mail=_59034B1F-B976-42CC-A371-8B68EE016E9A Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Stuart, I actually use this (Tom=E2=80=99s routine) as the basis of what I=E2=80=99= m 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: >=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=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. >>>>=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 --Apple-Mail=_59034B1F-B976-42CC-A371-8B68EE016E9A Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 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 --Apple-Mail=_59034B1F-B976-42CC-A371-8B68EE016E9A-- . 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)
2723 --Apple-Mail=_59034B1F-B976-42CC-A371-8B68EE016E9A Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Stuart, I actually use this (Tom=E2=80=99s routine) as the basis of what I=E2=80=99= m 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: >=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=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. >>>>=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 --Apple-Mail=_59034B1F-B976-42CC-A371-8B68EE016E9A Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 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 --Apple-Mail=_59034B1F-B976-42CC-A371-8B68EE016E9A-- . Michael Davis

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:

NetSplat and WebCat2 (1997) Quit revisited (1997) Help formatting search results w/ table (1997) How to add product size choices to form? (1997) WebCat and HTML/OS (2001) My solution... (1996) ShowNext Command (1997) Extended [ConvertChars] (1997) extending webcatalog (1997) about this server and links to who (1997) WebCat2 - Getting to the browser's username/password data (1997) Plugin or CGI or both (1997) Not really WebCat (1997) WebCat2b13MacPlugIn - [include] doesn't allow creator (1997) Menu to select product variations (1997) Pull down menu for categories (2000) WebCat and image maps (1997) Mac Programs (1998) too many nested tags ... (1997) Limit to Field Length in DB (1998)