Re: [WebDNA] JSONStore Levels

This WebDNA talk-list message is from

2020


It keeps the original formatting.
numero = 115093
interpreted = N
texte = 2722 --Apple-Mail=_62299B5A-C6F4-472B-9D17-6790B1F7B5FB Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 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=09 %A0=09 [/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] "=09 ~~~~| ^^^^" [/TABLE][!] ------------------- pass one - run the conversions ----------------- [/!][TEXT]JSONRESULT=3D[CONVERTWORDS = table=3DjsonSplitConversions][convertchars = table=3DjsonClean][JSONRESULT][/convertchars][/CONVERTWORDS][/TEXT][!] ------------------- pass two - add bar to just before each key:value = pair ----------------- [/!][TEXT]JSONRESULT=3D[GREP = search=3D("[^"]*"):&replace=3D|\1=3D][JSONRESULT][/GREP][/TEXT][!] ------------------- pass three - list out the key:value pairs and assign = them to text variables ----------------- [/!][LISTWORDS words=3D[url][JSONRESULT][/url]&delimiters=3D|{}][!] [/!][TEXT]THISVAL=3D[GREP search=3D(,$)&replace=3D][GETCHARS = start=3D1&trim=3Dboth][CONVERTWORDS = table=3DjsonSplitConversionsBack][word][/CONVERTWORDS][/GETCHARS][/GREP][/= TEXT][!] [/!][HIDEIF [url][THISVAL][/url]=3D][!] [/!][TEXT]JSON-[THISVAL][/TEXT][!] [/!][/HIDEIF][!] [/!][/LISTWORDS] Kind regards Stuart Tremain Pharoah Lane Software AUSTRALIA webdna@plsoftware.com.au > On 1 May 2020, at 08:10, talk@webdna.us wrote: >=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 --Apple-Mail=_62299B5A-C6F4-472B-9D17-6790B1F7B5FB Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 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 --Apple-Mail=_62299B5A-C6F4-472B-9D17-6790B1F7B5FB-- . 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)
2722 --Apple-Mail=_62299B5A-C6F4-472B-9D17-6790B1F7B5FB Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 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=09 %A0=09 [/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] "=09 ~~~~| ^^^^" [/TABLE][!] ------------------- pass one - run the conversions ----------------- [/!][text]JSONRESULT=3D[CONVERTWORDS = table=3DjsonSplitConversions][convertchars = table=3DjsonClean][JSONRESULT][/convertchars][/CONVERTWORDS][/TEXT][!] ------------------- pass two - add bar to just before each key:value = pair ----------------- [/!][text]JSONRESULT=3D[GREP = search=3D("[^"]*"):&replace=3D|\1=3D][JSONRESULT][/GREP][/TEXT][!] ------------------- pass three - list out the key:value pairs and assign = them to text variables ----------------- [/!][LISTWORDS words=3D[url][JSONRESULT][/url]&delimiters=3D|{}][!] [/!][text]THISVAL=3D[GREP search=3D(,$)&replace=3D][GETCHARS = start=3D1&trim=3Dboth][CONVERTWORDS = table=3DjsonSplitConversionsBack][word][/CONVERTWORDS][/GETCHARS][/GREP][/= TEXT][!] [/!][HIDEIF [url][THISVAL][/url]=3D][!] [/!][text]JSON-[THISVAL][/TEXT][!] [/!][/HIDEIF][!] [/!][/LISTWORDS] Kind regards Stuart Tremain Pharoah Lane Software AUSTRALIA webdna@plsoftware.com.au > On 1 May 2020, at 08:10, talk@webdna.us wrote: >=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 --Apple-Mail=_62299B5A-C6F4-472B-9D17-6790B1F7B5FB Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 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 --Apple-Mail=_62299B5A-C6F4-472B-9D17-6790B1F7B5FB-- . 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:

MacAuthorize order data fields WAS:How To question... (1997) group searching problem (2002) OH MY GOD! (1998) Pithy questions on webcommerce & siteedit (1997) User Defined Sorting (1997) WebCat2b13MacPlugin - [math][date][/math] problem (1997) Submitting ampersands in forms... (1998) how to get s repeatedly in and out of a form? (1999) Sku numbers (1997) Email Spam a bit of Hell (2004) [WebDNA] Copy database from domain 1 to domain 2 (2010) Search in 2 or more catalogs (1997) I try hard to think positively (1998) OT - webdnadev.net ...... links bad??? (2005) Country & Ship-to address & other fields ? (1997) [SHOWIF] (1997) Extended [ConvertChars] (1997) Free WebDNA snippets (Extending WebCatalog) (1997) database size? (1997) RE: protect tag on NT (1997)