How to store a JSON string in a DataSection?

Just starting out? Need help? Post your questions and find answers here.
IdeasVacuum
Always Here
Always Here
Posts: 6425
Joined: Fri Oct 23, 2009 2:33 am
Location: Wales, UK
Contact:

How to store a JSON string in a DataSection?

Post by IdeasVacuum »

JSON strings include {:[", etc, so how can that be encapsulated in a DataSection?
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
dagcrack
Addict
Addict
Posts: 1868
Joined: Sun Mar 07, 2004 8:47 am
Location: Argentina
Contact:

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

Post 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!
! Black holes are where God divided by zero !
My little blog!
(Not for the faint hearted!)
User avatar
Demivec
Addict
Addict
Posts: 4086
Joined: Mon Jul 25, 2005 3:51 pm
Location: Utah, USA

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

Post by Demivec »

You could store the JSON string in a file and use IncludeBinary "D:\file" in the DataSection.
IdeasVacuum
Always Here
Always Here
Posts: 6425
Joined: Fri Oct 23, 2009 2:33 am
Location: Wales, UK
Contact:

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

Post 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.
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
IdeasVacuum
Always Here
Always Here
Posts: 6425
Joined: Fri Oct 23, 2009 2:33 am
Location: Wales, UK
Contact:

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

Post 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.
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
dagcrack
Addict
Addict
Posts: 1868
Joined: Sun Mar 07, 2004 8:47 am
Location: Argentina
Contact:

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

Post 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.
! Black holes are where God divided by zero !
My little blog!
(Not for the faint hearted!)
Post Reply