LoadJSON() start per F5, wo muss das File liegen?

Hier könnt ihr alle Fragen zu SpiderBasic austauschen.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

LoadJSON() start per F5, wo muss das File liegen?

Beitrag von Kurzer »

Moin zusammen,
es geht um LoadJSON().

Folgender Code läuft unter PureBasic (da klappt alles) und (eigentlich auch) unter SpiderBasic.
Bei PureBasic liegt die JSON Datei auf Laufwerk D:\. Bei SpiderBasic liegt sie im selben Verzeichnis wie der Sourcecode. Beides starte ich per F5 aus der IDE, aber nur unter PureBasic wird mir die Struktur gefüllt und im Debugfenster angezeigt.

Unter Spider wird mir zwar bei Debug IsJSON(0) #True angezeigt, aber die Struktur wird nicht gefüllt.

Code: Alles auswählen

EnableExplicit

Structure structGadgetDef
	sType.s					; iGadgetType.i
EndStructure

Structure structLayout
	Map mpGadgets.structGadgetDef()
EndStructure

Global stJson.structLayout

CompilerIf #PB_Compiler_Processor = #PB_Processor_JavaScript
	; SpiderBasic
	LoadJSON(0, "frm_main2.txt")
CompilerElse	
	; PureBasic
	LoadJSON(0, "D:\frm_main2.txt")
CompilerEndIf

Debug IsJSON(0)
ExtractJSONStructure(JSONValue(0), @stJson, structLayout)

ForEach stJson\mpGadgets()
	Debug stJson\mpGadgets()\sType
Next
Hier noch die JSON Datei:

Code: Alles auswählen

{
	"mpGadgets": {
		"FR1": {
			"sType": "Test 1"
		},
		"FR2": {
			"sType": "Test 2"
		}
	}
}
Weiß jemand wo hier der Wurm drin ist? Man hat unter Spider ja nicht so viele Debugmöglichkeiten.

Markus

PS: Folgendes (angepasste) ReadFile-Beispiel aus der SpiderBasic Hilfe funktioniert einwandfrei.

Code: Alles auswählen

Procedure ReadCallback(Status, Filename$, File, Size)
  If Status = #PB_Status_Loaded
    While Eof(0) = 0
      Debug ReadString(0)            
    Wend
    CloseFile(0)
  ElseIf Status = #PB_Status_Error
    Debug "Error when loading the file: " + Filename$
  EndIf
EndProcedure

ReadFile(0, "frm_main2.txt", @ReadCallback())
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: LoadJSON() start per F5, wo muss das File liegen?

Beitrag von Kurzer »

Ich beantworte das mal selbst, denn der Fehler heißt in diesem Fall mal wieder "Unwissenheit".
SpiderBasic tickt an manchen Stellen doch anders als PureBasic. :|

So klappt es mit beiden Compilern:

Code: Alles auswählen

EnableExplicit

Structure structGadgetDef
	sType.s
EndStructure

Structure structLayout
	Map mpGadgets.structGadgetDef()
EndStructure

Global stJson.structLayout

Procedure Loaded(Type, Filename$, ObjectId)
	ExtractJSONStructure(JSONValue(0), @stJson, structLayout)
	
	ForEach stJson\mpGadgets()
		Debug stJson\mpGadgets()\sType
	Next   
EndProcedure

Procedure LoadingError(Type, Filename$, ObjectId)
   Debug Filename$ + ": loading error"
EndProcedure


CompilerIf #PB_Compiler_Processor = #PB_Processor_JavaScript
	; SpiderBasic
	Debug "Spider"
	
	; Register the loading event before calling any resource load command
	BindEvent(#PB_Event_Loading, @Loaded())
	BindEvent(#PB_Event_LoadingError, @LoadingError())
	
	LoadJSON(0, "frm_main2.txt")
CompilerElse	
	; PureBasic
	LoadJSON(0, "D:\frm_main2.txt")
	ExtractJSONStructure(JSONValue(0), @stJson, structLayout)
	
	ForEach stJson\mpGadgets()
		Debug stJson\mpGadgets()\sType
	Next
CompilerEndIf
Vielen Dank an Kiffi. :allright:
https://forums.spiderbasic.com/viewtopi ... 4625#p4625
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Antworten