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:

sort problems....bug or brain fart? (1997) WebCat2b13MacPlugIn - [include] doesn't allow creator (1997) Grep Help (2003) Users and groups for local directories (1999) Search returns all, not 20 (1997) formvariables question (2000) Deleting Orders (1998) Date problems-more (1997) Maybe off topic but how to charge (1997) Secure server question (1997) Interpreting WebDNA tags (2004) SSL data to/from webcatalog? (2000) Grepping text variable tags (was: No subject given) (2000) Database Updates (1997) WebCatalog [FoundItems] Problem - LONG - (1997) color and size options (1997) problems with 2 tags (1997) WebCat2b13 Mac plugin - [sendmail] and checkboxes (1997) format crash! (1997) word count in HTML form textarea and linebreaks (2000)