157 lines
No EOL
4.7 KiB
Text
Executable file
157 lines
No EOL
4.7 KiB
Text
Executable file
UseSQLiteDatabase()
|
|
OpenDatabase(0,"json.db","","",#PB_Database_SQLite)
|
|
|
|
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
|
|
|
|
|
|
Procedure parse(json)
|
|
; worry about the database init later
|
|
|
|
|
|
|
|
;LoadJSON(1,"test2.json") ; returns garbage without the PB ascii there not sure why
|
|
ParseJSON(1,json)
|
|
|
|
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
|
|
|
|
|
|
InsertIntoDatabase(key$,parentKey$,type$,value$)
|
|
|
|
Wend
|
|
EndIf
|
|
EndProcedure
|
|
; IDE Options = PureBasic 6.12 LTS (Linux - x64)
|
|
; CursorPosition = 149
|
|
; FirstLine = 113
|
|
; Folding = -
|
|
; EnableXP
|
|
; DPIAware
|
|
; Executable = jsonlib |