Page 1 of 1

How to store a JSON string in a DataSection?

Posted: Thu May 30, 2019 10:59 pm
by IdeasVacuum
JSON strings include {:[", etc, so how can that be encapsulated in a DataSection?

Re: How to store a JSON string in a DataSection?

Posted: Thu May 30, 2019 11:15 pm
by dagcrack
Hi, you could try using EscapeString() and UnescapeString() for one way of doing it.

Code: Select all

EnableExplicit

Structure TEST_STRUCT
	DecimalPlaces.i
	WindowRect.RECT
EndStructure

Define.s json_raw
Define.s json_unescaped
Define.TEST_STRUCT struct

; obtain the raw escaped data.
Restore json_data
Read.s json_raw

json_unescaped = UnescapeString(json_raw, #PB_String_EscapeXML) ; unescape the string data

Define.i json = ParseJSON(#PB_Any, json_unescaped) ; parse the unescaped string
If IsJSON( json ) ; did we get a valid json?
  ExtractJSONStructure(JSONValue(json), @struct, TEST_STRUCT) ; load up the data onto the structure
  FreeJSON( json ) ; get rid of the jeeey, son.
EndIf

;Show me what you've got!
Debug json_raw
Debug "-------"
Debug json_unescaped
Debug "-------"
Debug "Decimal places: " + struct\DecimalPlaces
Debug "Rect Left: " + struct\WindowRect\left
Debug "Rect Bottom: " + struct\WindowRect\bottom
Debug "Rect Top: " + struct\WindowRect\top
Debug "Rect Right: " + struct\WindowRect\right

DataSection
	json_data:
	Data.s "{"WindowRect":{"left":12,"bottom":34,"top":56,"right":78},"DecimalPlaces":1234}"
	
One way you could quickly escape the text for testing purposes (or for a once off) is to use GetClipboardText()

Code: Select all

Debug EscapeString( GetClipboardText(), #PB_String_EscapeXML)
Cheers!

Re: How to store a JSON string in a DataSection?

Posted: Fri May 31, 2019 12:16 am
by Demivec
You could store the JSON string in a file and use IncludeBinary "D:\file" in the DataSection.

Re: How to store a JSON string in a DataSection?

Posted: Fri May 31, 2019 2:12 am
by IdeasVacuum
Hi dagcrack

Thanks for your reply.
It's not possible to store JSON strings in the Data Section like that if they include symbols like speech marks, hence my post. I was hoping there could be a clever way to encapsulate the whole JSON string such that PB sees it as just another string.
I'm not going to parse the JSON strings, they are part of a set of info that is saved in a text file.

My current solution is the read them in from a file, concern being that they could be inadvertently deleted - but Demivec's idea solves that.

Re: How to store a JSON string in a DataSection?

Posted: Fri May 31, 2019 2:14 am
by IdeasVacuum
Hi Demivec
You could store the JSON string in a file and use IncludeBinary "D:\file" in the DataSection.
... great idea, thank you.

Re: How to store a JSON string in a DataSection?

Posted: Sun Jun 09, 2019 11:36 pm
by dagcrack
Speech marks? try using Base64 encoding then. If for any reason you don't want the resource to be edited it would at least make it "slightly" harder to do so; although it is fairly trivial.