pbjsonlib/jsonlib.pb
2024-12-11 18:07:01 -06:00

158 lines
No EOL
5 KiB
Text
Executable file

UseSQLiteDatabase()
Procedure InsertIntoDatabase(key$, parentKey$, type$, value$)
query$ = "INSERT INTO json_data (key, parent_key, type, value) VALUES ('" + key$ + "', '" + parentKey$ + "', '" + type$ + "', '" + value$ + "')"
If DatabaseUpdate(0, query$) = 0
Debug "Error inserting data: " + DatabaseError()
EndIf
EndProcedure
; Nested object handling
Procedure HandleNestedObject(JSONValue, parentKey$)
If ExamineJSONMembers(JSONValue)
While NextJSONMember(JSONValue)
key$ = JSONMemberKey(JSONValue)
MemberValue = JSONMemberValue(JSONValue)
Debug MemberValue
; Process the member value as before
; Now extract the actual value based on its type
Select JSONType(MemberValue)
Case #PB_JSON_String
value$ = GetJSONString(MemberValue)
type$ = "String"
Case #PB_JSON_Number
value$ = StrD(GetJSONDouble(MemberValue))
type$ = "Number"
Case #PB_JSON_Boolean
value$ = Str(Bool(GetJSONBoolean(MemberValue))) ;Feels cheaty, but it workssss
type$ = "Boolean"
Case #PB_JSON_Object
value$ = "(nested object)"
;Debug key$
parentKey$ = key$
type$ = "object"
; You could further examine this nested object if needed.
;HandleNestedObject(MemberValue, key$)
Case #PB_JSON_Array
value$ = "(nested array)"
type$ = "Array"
; Handle array values if needed.
;HandleNestedArray(MemberValue, key$)
Default
value$ = "(unknown type)"
type$ = "Unknown"
EndSelect
;InsertIntoDatabase(key$, parentKey$, "Object", "(nested object)") ; Adjust type as necessary
InsertIntoDatabase(key$,parentKey$,type$,value$)
Wend
EndIf
EndProcedure
; Nested array handling
Procedure HandleNestedArray(JSONValue, parentKey$)
arraySize = JSONArraySize(JSONValue)
For arrayIndex = 0 To arraySize - 1
elementValue = GetJSONElement(JSONValue, arrayIndex)
arrayItemKey$ = parentKey$ + "[" + Str(arrayIndex) + "]"
Select JSONType(elementValue)
Case #PB_JSON_String
value$ = GetJSONString(elementValue)
InsertIntoDatabase(arrayItemKey$, parentKey$, "String", value$)
Case #PB_JSON_Number
value$ = StrD(GetJSONDouble(elementValue))
InsertIntoDatabase(arrayItemKey$, parentKey$, "Number", value$)
Case #PB_JSON_Boolean
value$ = Str(GetJSONBoolean(elementValue))
InsertIntoDatabase(arrayItemKey$, parentKey$, "Boolean", value$)
Case #PB_JSON_Object
InsertIntoDatabase(arrayItemKey$, parentKey$, "Object", "(nested object)")
HandleNestedObject(elementValue, arrayItemKey$)
Case #PB_JSON_Array
InsertIntoDatabase(arrayItemKey$, parentKey$, "Array", "(nested array)")
HandleNestedArray(elementValue, arrayItemKey$)
Default
InsertIntoDatabase(arrayItemKey$, parentKey$, "Unknown", "(unknown type)")
EndSelect
Next
EndProcedure
; worry about the database init later
OpenDatabase(0,"json.db","","",#PB_Database_SQLite)
LoadJSON(1,"test5.json");ParseJSON(1, json$) ; returns garbage without the PB ascii there not sure why
; ParseJSON(1, json$) ; returns garbage without the PB ascii there not sure why
ObjectValue = JSONValue(1)
If ExamineJSONMembers(ObjectValue)
While NextJSONMember(ObjectValue)
key$ = JSONMemberKey(ObjectValue)
MemberValue = JSONMemberValue(ObjectValue)
parentKey$ = "" ; Assuming no parent key information is available in the current code.
; Now extract the actual value based on its type
Select JSONType(MemberValue)
Case #PB_JSON_String
value$ = GetJSONString(MemberValue)
type$ = "String"
Case #PB_JSON_Number
value$ = StrD(GetJSONDouble(MemberValue))
type$ = "Number"
Case #PB_JSON_Boolean
value$ = Str(Bool(GetJSONBoolean(MemberValue))) ;Feels cheaty, but it workssss
type$ = "Boolean"
Case #PB_JSON_Object
value$ = "(nested object)"
;Debug key$
parentKey$ = key$
type$ = "object"
; You could further examine this nested object if needed.
HandleNestedObject(MemberValue, key$)
Case #PB_JSON_Array
value$ = "(nested array)"
type$ = "Array"
; Handle array values if needed.
HandleNestedArray(MemberValue, key$)
Default
value$ = "(unknown type)"
type$ = "Unknown"
EndSelect
; Insert the parsed data into the SQLite database
;query$ = "INSERT INTO json_data (key, parent_key, type, value) VALUES ('" + key$ + "', '" + parentKey$ + "', '" + type$ + "', '" + value$ + "')"
;If DatabaseUpdate(0, query$) = 0
; Debug "Error inserting data: " + DatabaseError()
;EndIf
InsertIntoDatabase(key$,parentKey$,type$,value$)
Wend
EndIf
CloseDatabase(0)
; IDE Options = PureBasic 6.12 LTS (Linux - x64)
; CursorPosition = 126
; FirstLine = 89
; Folding = -
; EnableXP
; DPIAware