Aktuelle Zeit: 04.07.2020 12:12

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: CombineJSONMember() & SetActiveJSONMember()
BeitragVerfasst: 30.07.2017 14:34 
Offline

Registriert: 29.08.2004 13:18
Ich brauchte eine Möglichkeit, um zwei JSON zu mischen.
Ziel war es in JSON1 quasi Default-Werte zu speichern und dann in JSON2 einzufügen mit den tatsächlichen Einstellungen.

CombineJSONMember(ObjectValue1,ObjectValue2)
Fügt alle Einträge aus ObjectValue2 in ObjectValue1 ein. Kein Rückgabewert

SetActiveJSONMember(ObjectValue,KeyName.s)
sucht in Object nach den MemberKey und gibt entweder den MemberValue oder 0 (für nicht gefunden) zurück.


Code:
Declare CombineJSONMember(Value1,Value2)

  Procedure SetActiveJSONMember(ObjectValue,name.s)
    Protected ret
    If ExamineJSONMembers(ObjectValue)
      While NextJSONMember(ObjectValue)
        If JSONMemberKey(ObjectValue)=name
          ret=JSONMemberValue(ObjectValue)
          Break
        EndIf
      Wend
    EndIf
    ProcedureReturn ret
  EndProcedure
  Procedure _InsertArray(newva,jmv2)
    Protected count1,count,i,Element,NewElement
    count1=JSONArraySize(newva)
    count=JSONArraySize(jmv2)
    For i=0 To count-1
      Element=GetJSONElement(jmv2,i)
      If i<count1
        RemoveJSONElement(newva,i)
      EndIf
      NewElement=AddJSONElement(newva,i)
      Select JSONType(element)
        Case #PB_JSON_Null
          SetJSONNull(NewElement)
        Case #PB_JSON_String
          SetJSONString(NewElement,GetJSONString(Element))
        Case #PB_JSON_Number
          SetJSONDouble(NewElement,GetJSONDouble(Element))
        Case #PB_JSON_Boolean
          SetJSONBoolean(NewElement,GetJSONBoolean(Element))
        Case #PB_JSON_Array
          SetJSONArray(NewElement)
          _InsertArray(NewElement,Element)
        Case #PB_JSON_Object
          SetJSONObject(NewElement)
          CombineJSONMember(NewElement,Element)
      EndSelect
    Next     
  EndProcedure
  Procedure CombineJSONMember(Value1,Value2)
    Protected newva
    Protected jmv2
    Protected jmk2.s
    If ExamineJSONMembers(Value2)
      While NextJSONMember(Value2)
       
        jmv2=JSONMemberValue(Value2)
        jmk2.s=JSONMemberKey(Value2)
       
        Select JSONType(jmv2)
          Case #PB_JSON_Null
            newva=AddJSONMember(Value1,jmk2)
            SetJSONNull(newva)
          Case #PB_JSON_String
            newva=AddJSONMember(Value1,jmk2)
            SetJSONString(newva,GetJSONString(jmv2))
          Case #PB_JSON_Number
            newva=AddJSONMember(Value1,jmk2)
            SetJSONDouble(newva,GetJSONDouble(jmv2))
          Case #PB_JSON_Boolean
            newva=AddJSONMember(Value1,jmk2)
            SetJSONBoolean(newva,GetJSONBoolean(jmv2))
          Case #PB_JSON_Array           
            newva=SetActiveJSONMember(Value1,jmk2)
            If newva=0 Or JSONType(newva)<>#PB_JSON_Array
              newva=AddJSONMember(Value1,jmk2)
              SetJSONArray(newva)
            EndIf
            _InsertArray(newva,jmv2)
          Case #PB_JSON_Object
            newva=SetActiveJSONMember(Value1,jmk2)
            If newva=0 Or JSONType(newva)<>#PB_JSON_Object
              newva=AddJSONMember(Value1,jmk2)
              SetJSONObject(newva)
            EndIf
            CombineJSONMember(newva,jmv2)
        EndSelect
      Wend
    EndIf
  EndProcedure
Structure s1
  a.i
  b.i
EndStructure
Structure t1
  a.i
  v.s1
EndStructure

Structure s2
  a.i
  d.s
EndStructure

Structure t2
  a.i
  c.i
  d.i
  v.s2
  w.s2
  List str.s()
  Array List.s1(2)
EndStructure

j1=CreateJSON(#PB_Any)
j2=CreateJSON(#PB_Any)


v1.t1
v1\a=10
v1\v\a=20
v1\v\b=30

v2.t2
v2\a=40
v2\c=50
v2\d=60
v2\v\a=70
v2\v\d="String1"
v2\w\a=80
v2\w\d="String2"
AddElement(v2\Str()):v2\Str()="String3"
AddElement(v2\Str()):v2\Str()="String4"
AddElement(v2\Str()):v2\Str()="String5"
For i=0 To 2
  v2\List(i)\a=1000*i+100
  v2\List(i)\b=1000*i+110
Next


InsertJSONStructure(JSONValue(j1),@v1,t1)
InsertJSONStructure(JSONValue(j2),@v2,t2)

Debug "V1"
Debug ComposeJSON(j1)
Debug "v2"
Debug ComposeJSON(j2)




CombineJSONMember(JSONValue(j1),JSONValue(j2))
Debug "Combine in v1"
Debug ComposeJSON(j1)

                   


Edit: _Insert ersetzt jetzt nicht mehr Arrays, sondern combiniert sie.

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye