Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JSON Format aus SimpleAPI Adapter

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    JSON Format aus SimpleAPI Adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • Bobby
      Bobby last edited by

      Hallo Freunde,

      ich speichere einen JSON String im Datenpunkt der richtig geschrieben wird:

      {
        "data": [
          {
            "temperaturaussen": 9,
            "feuchtaussen": 87.54,
            "temperaturwohnzimmer": 21,
            "feuchtwohnzimmer": 56.98,
            "temperaturbadezimmer": 21,
            "feuchtbadezimmer": 60.79,
            "davefeucht": 58,
            "daveduenger": 1345,
            "udofeucht": 50,
            "udoduenger": 294
          }
        ]
      }
      

      Über getPlainValue im Simple Adapter bekomme ich jedoch folgenden Output:

      "{\"data\":[{\"temperaturaussen\":9,\"feuchtaussen\":87.54,\"temperaturwohnzimmer\":21,\"feuchtwohnzimmer\":56.98,\"temperaturbadezimmer\":21,\"feuchtbadezimmer\":60.79,\"davefeucht\":58,\"daveduenger\":1345,\"udofeucht\":50,\"udoduenger\":294}]}"
      

      Kann mir jemand erklären wo die \ herkommen ?

      Ich schreibe den Datenpunkt über folgendes Script

      setState("javascript.0.EigeneDatenpunkte.Daten", {
              data: [{
                  temperaturaussen: getState("javascript.0.EigeneDatenpunkte.TemperaturBalkon").val,
                  feuchtaussen: getState("deconz.0.Sensors.10.humidity").val,
                  temperaturwohnzimmer: getState("javascript.0.EigeneDatenpunkte.TemperaturWohnzimmer").val,
                  feuchtwohnzimmer: getState("deconz.0.Sensors.13.humidity").val,
                  temperaturbadezimmer: getState("javascript.0.EigeneDatenpunkte.TemperaturBadezimmer").val,
                  feuchtbadezimmer: getState("deconz.0.Sensors.16.humidity").val,
                  davefeucht: getState("ble.0.c4:7c:8d:6d:c3:63.moisture").val,
                  daveduenger: getState("ble.0.c4:7c:8d:6d:c3:63.fertility").val,
                  udofeucht: getState("ble.0.c4:7c:8d:6d:c3:7d.moisture").val,
                  udoduenger: getState("ble.0.c4:7c:8d:6d:c3:7d.fertility").val
              }]
          });
      

      Grüße und Danke

      Jey Cee paul53 mickym 3 Replies Last reply Reply Quote 0
      • Jey Cee
        Jey Cee Developer @Bobby last edited by

        @bobby sagte in JSON Format aus SimpleAPI Adapter:

        Kann mir jemand erklären wo die \ herkommen ?

        Das JSON wird in einen String umgewandelt. Damit das wieder ein JSON wird musst du den String mit JSON.parse(string) umwandeln.

        Bobby 1 Reply Last reply Reply Quote 0
        • Bobby
          Bobby @Jey Cee last edited by

          @jey-cee Ich möchte die Werte gerne in Android Studio benutzen.

          Wenn ich

          val dataJson = JSONObject(jsonstring)
          

          versuche bekomme ich folgende Fehlermeldung

          org.json.JSONException: Value {"data":[{"temperaturaussen":14,"feuchtaussen":76.75,"temperaturwohnzimmer":21,"feuchtwohnzimmer":56.65,"temperaturbadezimmer":21,"feuchtbadezimmer":60.02,"davefeucht":58,"daveduenger":1345,"udofeucht":50,"udoduenger":294}]} of type java.lang.String cannot be converted to JSONObject
          
          OliverIO 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Bobby last edited by

            @bobby sagte: Ich schreibe den Datenpunkt über folgendes Script

            Damit wird ein Objekt in den Datenpunkt geschrieben. Für ein JSON braucht es JSON.stringify(obj).

            setState("javascript.0.EigeneDatenpunkte.Daten", JSON.stringify(
                {
                    data: [{
                        temperaturaussen: getState("javascript.0.EigeneDatenpunkte.TemperaturBalkon").val,
                        feuchtaussen: getState("deconz.0.Sensors.10.humidity").val,
                        temperaturwohnzimmer: getState("javascript.0.EigeneDatenpunkte.TemperaturWohnzimmer").val,
                        feuchtwohnzimmer: getState("deconz.0.Sensors.13.humidity").val,
                        temperaturbadezimmer: getState("javascript.0.EigeneDatenpunkte.TemperaturBadezimmer").val,
                        feuchtbadezimmer: getState("deconz.0.Sensors.16.humidity").val,
                        davefeucht: getState("ble.0.c4:7c:8d:6d:c3:63.moisture").val,
                        daveduenger: getState("ble.0.c4:7c:8d:6d:c3:63.fertility").val,
                        udofeucht: getState("ble.0.c4:7c:8d:6d:c3:7d.moisture").val,
                        udoduenger: getState("ble.0.c4:7c:8d:6d:c3:7d.fertility").val
                    }]
                }
            ));
            
            Bobby 1 Reply Last reply Reply Quote 0
            • Bobby
              Bobby @paul53 last edited by

              Ich bekomme ja den richtigen String ausgelesen.

              V/JSON: "{\"temperaturaussen\":13,\"feuchtaussen\":77.18,\"temperaturwohnzimmer\":21,\"feuchtwohnzimmer\":57.5,\"temperaturbadezimmer\":21,\"feuchtbadezimmer\":63.18,\"davefeucht\":58,\"daveduenger\":1345,\"udofeucht\":50,\"udoduenger\":294}"
              

              Nur wenn ich ihn verarbeiten will bekomme ich eine Fehlermeldung:

              Log.v("JSON",fullJson);
                      val dataJson = JSONObject(fullJson)
              
              of type java.lang.String cannot be converted to JSONObject
              
              liv-in-sky 1 Reply Last reply Reply Quote 0
              • liv-in-sky
                liv-in-sky @Bobby last edited by liv-in-sky

                @bobby sagte in JSON Format aus SimpleAPI Adapter:

                JSONObject

                kannst du den string nicht vorher bearbeiten und alle schrägstriche entfernen - bin sicher java kann das

                bevor du JSONObject(fullJson)
                ausführst

                irgendwie so: str.replaceAll("\", "")); oder str.replaceAll("\\", ""))
                
                1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @Bobby last edited by

                  @bobby sagte in JSON Format aus SimpleAPI Adapter:

                  @jey-cee Ich möchte die Werte gerne in Android Studio benutzen.

                  Wenn ich

                  val dataJson = JSONObject(jsonstring)
                  

                  versuche bekomme ich folgende Fehlermeldung

                  org.json.JSONException: Value {"data":[{"temperaturaussen":14,"feuchtaussen":76.75,"temperaturwohnzimmer":21,"feuchtwohnzimmer":56.65,"temperaturbadezimmer":21,"feuchtbadezimmer":60.02,"davefeucht":58,"daveduenger":1345,"udofeucht":50,"udoduenger":294}]} of type java.lang.String cannot be converted to JSONObject
                  

                  Diesem Artikel nach müsste der richtige Befehl wie folgt lauten

                  
                  JSONObject dataJson = new JSONObject(jsonstring);
                  
                  

                  https://stackoverflow.com/questions/18192891/conversion-from-string-to-json-object-android

                  Bobby 1 Reply Last reply Reply Quote 0
                  • Bobby
                    Bobby @OliverIO last edited by

                    @oliverio Ich bin dabei meine eigene Smart Home App zu schreiben, dafür benutze ich Kotlin.

                    Da gibt es leider

                    JSONObject dataJson = new JSONObject(jsonstring);
                    

                    nicht, nur

                    val dataJson = JSONObject(jsonstring)
                    
                    Bobby 1 Reply Last reply Reply Quote 0
                    • Bobby
                      Bobby @Bobby last edited by

                      Wenn ich den Datenpunkt als String speichere, z.B. so

                      setState("javascript.0.EigeneDatenpunkte.Wandtablet_Daten", "data: [{tempaussen: 42, tempwohnzimmer: 39}]")
                      

                      Und dann ein Json Objekt erstelle

                      val dataJson = JSONObject("{" + fullJson.substring(1, fullJson.length -1) + "}")
                      

                      indem ich Klammern wieder einfüge funktioniert es zwar, aber das scheint mir irgendwie nicht des Rätsels Lösung zu sein.
                      Wirkt auch einfach zu umständlich.

                      1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @Bobby last edited by mickym

                        @bobby Im Prinzip ist der output doch in Ordnung - die Anführungszeichen werden maskiert.

                        Ich hab es mal mit Deinem String versucht - keine Probleme:

                        let obj2 = JSON.parse("{\"data\":[{\"temperaturaussen\":9,\"feuchtaussen\":87.54,\"temperaturwohnzimmer\":21,\"feuchtwohnzimmer\":56.98,\"temperaturbadezimmer\":21,\"feuchtbadezimmer\":60.79,\"davefeucht\":58,\"daveduenger\":1345,\"udofeucht\":50,\"udoduenger\":294}]}");
                        
                        log (obj2);
                        log (obj2.data[0].temperaturwohnzimmer);
                        

                        918c9d3a-18ba-42fb-b743-31476b0b5960-image.png

                        Im Prinzip ist deshalb eigentlich der Antwort von @Jey-Cee nichts hinzuzufügen und man muss auch überhaupt keine Verrenkungen mit Stringmanipulationen machen.

                        Also:

                        val dataJson = JSON.parse(jsonstring)
                        

                        Wenn Du das ganze wieder stringifizierst - dann ist die Maskierung auch wieder weg:

                        f5f7d2b4-d172-4ced-a59f-1479048f175b-image.png

                        Ist in meinen Augen unnötig, aber damit würde quasi Deine Zuweisung wie folgt aussehen:

                        val dataJson = JSONObject(JSON.stringify(JSON.parse(jsonstring)))
                        
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        507
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        6
                        10
                        1118
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo