SimplyJson

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: SimplyJson

Message par Shadow »

Merci Falsam,

Sait tu comment faire avec l'exemple de G-Rom ?
Sans utiliser le Json, comme il a fait lui.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: SimplyJson

Message par G-Rom »

Bien sur qu'il le sait , mais si tu lui demande c'est que tu n'as pas compris mon code plus haut. il y a une notion de pointeur , de taille mémoire , etc...
si tu comprend mon exemple plus haut, tu peut tout écrire sur ton disque.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: SimplyJson

Message par Shadow »

Voici une version beaucoup plus court et Minimal.
Désormais plus de limite.

Code : Tout sélectionner

; Créé par Dieppedalle David le 02/04/2020.

; Simplifie énormément les ajouts et les récupérations des données du Json grâce à un Patch (Adresse).
; Vous aurez besoin de la commande suivante pour l'utiliser avec les Json:
; SimplyJson::FindPatch(#IDJson, Patch$)
; Patch$ est une adresse sous forme de chaîne de caractères avec la syntaxe suivante: NomElement1\NomElement2\NomElement3, Etc.
; Grace à cela, vous n'avez plus à vous souciez des adresses mémoire multiples, Encombrantes, et Déroutante, le programme se charge de tous !
; Vous pouvez faire ce que bon vous semble, pas de limite !

DeclareModule SimplyJson
  
  Declare.b CheckPatch(Patch.s)
  Declare.i FindPatch(ID.i, Patch.s)
  Declare.b CreatePatch(ID.i, Patch.s)

EndDeclareModule
Module SimplyJson
  
  ; Vérifie que la chaîne qui contient le Patch est correct.
  Procedure.b CheckPatch(Patch.s)
    
    If Mid(Patch.s, 1, 1) = "\" Or FindString(Patch.s, "\\") Or Mid(Patch.s, Len(Patch.s), 1) = "\" Or FindString(Patch.s, Chr(34)) Or FindString(Patch.s, "/") Or FindString(Patch.s, ":") Or FindString(Patch.s, "*") Or 
       FindString(Patch.s, "?") Or FindString(Patch.s, "<") Or FindString(Patch.s, ">") Or FindString(Patch.s, "|") Or Patch.s = ""
      ProcedureReturn 0
      
    Else
      ProcedureReturn 1
      
    EndIf
    
  EndProcedure
  
  ; Cherche le Patch dans le Json et s'il a été trouvé alors renvoie sont adresse mémoire, sinon 0.
  Procedure.i FindPatch(ID.i, Patch.s)
    
    If IsJSON(ID.i) And CheckPatch(Patch.s) And JSONValue(ID.i)
      
      PatchMemoryAdress.i = JSONValue(ID.i)
      NombreSlash.i = CountString(Patch.s, "\")
      
      If NombreSlash.i = 0
        
        MembreName.s = StringField(Patch.s, 1, "\")
        Trouver.b = 0
        
        If JSONType(PatchMemoryAdress.i) = 5
          
          If ExamineJSONMembers(PatchMemoryAdress.i)
            While NextJSONMember(PatchMemoryAdress.i)
              If JSONMemberKey(PatchMemoryAdress.i) = MembreName.s
                PatchMemoryAdress.i = JSONMemberValue(PatchMemoryAdress.i)
                Trouver.b = 1
                Break
              EndIf
            Wend
          EndIf
          
          If Trouver.b = 0
            ProcedureReturn 0
          Else
            ProcedureReturn PatchMemoryAdress.i
          EndIf
          
        Else
          ProcedureReturn 0
          
        EndIf
        
      ElseIf NombreSlash.i > 0
        
        If JSONType(PatchMemoryAdress.i) = 5
          
          For Index.i = 0 To NombreSlash.i
            
            MembreName.s = StringField(Patch.s, Index.i + 1, "\")
            Trouver.b = 0
            
            If JSONType(PatchMemoryAdress.i) = 5 And ExamineJSONMembers(PatchMemoryAdress.i)
              While NextJSONMember(PatchMemoryAdress.i)
                If JSONMemberKey(PatchMemoryAdress.i) = MembreName.s
                  PatchMemoryAdress.i = JSONMemberValue(PatchMemoryAdress.i)
                  Trouver.b = 1
                  Break
                EndIf
              Wend
            EndIf
            
            If Trouver.b = 0
              ProcedureReturn 0
            EndIf
            
          Next
          
          ProcedureReturn PatchMemoryAdress
          
        Else
          ProcedureReturn 0
          
        EndIf
        
      EndIf
      
    EndIf
    
  EndProcedure
  
  ; Création des éléments et de leur valeur dans le Json grace à un Patch (Adresse).
  Procedure.b CreatePatch(ID.i, Patch.s)
    
    If IsJSON(ID.i) And CheckPatch(Patch.s) And JSONValue(ID.i)
      PatchMemoryAdress.i = FindPatch(ID.i, Patch.s)
      
      If Not PatchMemoryAdress.i
        
        PatchMemoryAdress.i = JSONValue(ID.i)
        NombreSlash.i = CountString(Patch.s, "\")
        
        If NombreSlash.i = 0
          
          If Not JSONType(PatchMemoryAdress.i) = 5
            Value.i = SetJSONObject(JSONValue(ID.i))
          Else
            Value.i = JSONValue(ID.i)
          EndIf
          
          If AddJSONMember(Value.i, Patch.s)
            ProcedureReturn 1
          Else
            ProcedureReturn 0
          EndIf
          
        ElseIf NombreSlash.i > 0
          
          For Index.i = 0 To NombreSlash.i
            
            MembreName.s = StringField(Patch.s, Index.i + 1, "\")
            Trouver.b = 0
            
            If JSONType(PatchMemoryAdress.i) = 5 ; La valeur est t'elle de type Objet ?
              
              If ExamineJSONMembers(PatchMemoryAdress.i) ; Cherchons dans ses membres.
                While NextJSONMember(PatchMemoryAdress.i); Tant qu'il y a des Membres.
                  If JSONMemberKey(PatchMemoryAdress.i) = MembreName.s ; Si le Nom du Membre en cours d'examination est le même que celui qu'on cherche.
                    PatchMemoryAdress.i = JSONMemberValue(PatchMemoryAdress.i)
                    Trouver.b = 1
                    Break
                  EndIf
                Wend
              EndIf
              
              If Trouver.b = 1
                PrecedentMembreName.s = MembreName.s
                Continue
                
              ElseIf Trouver.b = 0
                
                If JSONType(PatchMemoryAdress.i) <> 5
                  
                  If AddJSONMember(SetJSONObject(PatchMemoryAdress.i), MembreName.s)
                    PatchMemoryAdress.i = JSONMemberValue(PatchMemoryAdress.i)
                    Continue
                    
                  Else
                    ProcedureReturn 0
                    
                  EndIf
                  
                Else
                  
                  If AddJSONMember(PatchMemoryAdress.i, MembreName.s)
                    PatchMemoryAdress.i = JSONMemberValue(PatchMemoryAdress.i)
                    Continue
                    
                  Else
                    ProcedureReturn 0
                    
                  EndIf
                  
                EndIf
                
              EndIf
              
            Else
              
              For Index2 = Index To NombreSlash.i
                
                MembreName.s = StringField(Patch.s, Index2.i + 1, "\")
                
                If AddJSONMember(SetJSONObject(PatchMemoryAdress.i), MembreName.s)
                  PatchMemoryAdress.i = JSONMemberValue(PatchMemoryAdress.i)
                  Continue
                  
                Else
                  ProcedureReturn 0
                  
                EndIf
                
              Next
              
              Break
              
            EndIf
            
          Next
          
          ProcedureReturn 1
          
        EndIf
        
      Else
        ProcedureReturn 0
        
      EndIf
      
    Else
      ProcedureReturn 0
      
    EndIf
    
  EndProcedure
  
EndModule

#MyJson = 1 ; Id du Json.

If CreateJSON(#MyJson) ; Création du Json.
  
  ; Ont peut pour le fun, vérifier les Patchs pour voir si la syntaxe est valide: 0 = Non, 1 = Oui.
  Debug SimplyJson::CheckPatch("Famille\Membre\Parents\Tom")
  Debug SimplyJson::CheckPatch("Famille\Membre\Parents\Calypso")
  Debug SimplyJson::CheckPatch("Famille\Membre\Parents\Enfants")
  
  ; Ajouts des éléments dans le Json, Renvoie: 0 = Echec, 1 = Ok.
  ; Ici le programme gère tous tout seul, si besoin, il crééra automatiquement les objets dans le Json.
  SimplyJson::CreatePatch(#MyJson, "Famille\Membre\Parents\Tom")
  SimplyJson::CreatePatch(#MyJson, "Famille\Membre\Parents\Calypso")
  SimplyJson::CreatePatch(#MyJson, "Famille\Membre\Parents\Enfants")
  
  ; Inscris une valeurs dans chaque élément du Json.
  SetJSONString(SimplyJson::FindPatch(#MyJson, "Famille\Membre\Parents\Tom"), "123")
  SetJSONString(SimplyJson::FindPatch(#MyJson, "Famille\Membre\Parents\Calypso"), "234")
  SetJSONString(SimplyJson::FindPatch(#MyJson, "Famille\Membre\Parents\Enfants"), "345")
  
  ; Récupère la valeur dans chaque élément du Json. 
  Debug "Famille\Membre\Parents\Tom = " + GetJSONString(SimplyJson::FindPatch(#MyJson, "Famille\Membre\Parents\Tom"))
  Debug "Famille\Membre\Parents\Calypso = " + GetJSONString(SimplyJson::FindPatch(#MyJson, "Famille\Membre\Parents\Calypso"))
  Debug "Famille\Membre\Parents\Enfants = " + GetJSONString(SimplyJson::FindPatch(#MyJson, "Famille\Membre\Parents\Enfants"))
  
  ; Affichage.
  Debug "--------------------------------------------------------------------------------"
  Debug ComposeJSON(#MyJson, #PB_JSON_PrettyPrint)
  Debug "--------------------------------------------------------------------------------"
  
EndIf
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Répondre