PureBasic Forum
http://forums.purebasic.com/english/

How to store a JSON string in a DataSection?
http://forums.purebasic.com/english/viewtopic.php?f=13&t=72918
Page 1 of 1

Author:  IdeasVacuum [ Thu May 30, 2019 10:59 pm ]
Post subject:  How to store a JSON string in a DataSection?

JSON strings include {:[", etc, so how can that be encapsulated in a DataSection?

Author:  dagcrack [ Thu May 30, 2019 11:15 pm ]
Post subject:  Re: How to store a JSON string in a DataSection?

Hi, you could try using EscapeString() and UnescapeString() for one way of doing it.

Code:
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:
Debug EscapeString( GetClipboardText(), #PB_String_EscapeXML)


Cheers!

Author:  Demivec [ Fri May 31, 2019 12:16 am ]
Post subject:  Re: How to store a JSON string in a DataSection?

You could store the JSON string in a file and use IncludeBinary "D:\file" in the DataSection.

Author:  IdeasVacuum [ Fri May 31, 2019 2:12 am ]
Post subject:  Re: How to store a JSON string in a DataSection?

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.

Author:  IdeasVacuum [ Fri May 31, 2019 2:14 am ]
Post subject:  Re: How to store a JSON string in a DataSection?

Hi Demivec

Quote:
You could store the JSON string in a file and use IncludeBinary "D:\file" in the DataSection.


... great idea, thank you.

Author:  dagcrack [ Sun Jun 09, 2019 11:36 pm ]
Post subject:  Re: How to store a JSON string in a DataSection?

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.

Page 1 of 1 All times are UTC + 1 hour
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/