diff --git a/json.db b/json.db index aa49489..3650e4c 100755 Binary files a/json.db and b/json.db differ diff --git a/jsonlib.pb b/jsonlib.pb index 0271e72..d63c792 100755 --- a/jsonlib.pb +++ b/jsonlib.pb @@ -1,13 +1,77 @@ 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$) + Dim arrayitems(0) + Debug "Array" + ExtractJSONArray(JSONValue, arrayitems()) + + For i = 0 To ArraySize(arrayitems()) + Debug "Array item" + arrayitems(i) + InsertIntoDatabase(key$,parentKey$,"array",Str(arrayitems(i))) + Next i +EndProcedure ; worry about the database init later OpenDatabase(0,"json.db","","",#PB_Database_SQLite) - LoadJSON(1,"results.json");ParseJSON(1, json$) ; returns garbage without the PB ascii there not sure why + 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 + ; ParseJSON(1, json$) ; returns garbage without the PB ascii there not sure why ObjectValue = JSONValue(1) If ExamineJSONMembers(ObjectValue) @@ -37,11 +101,13 @@ OpenDatabase(0,"json.db","","",#PB_Database_SQLite) 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)" @@ -50,15 +116,19 @@ OpenDatabase(0,"json.db","","",#PB_Database_SQLite) 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 + ;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 = 37 -; FirstLine = 15 +; CursorPosition = 63 +; FirstLine = 43 +; Folding = - ; EnableXP ; DPIAware \ No newline at end of file