Seite 1 von 1

Bekomme JSON String nicht eingelesen - Reolink Kamera

Verfasst: 1. Jun 2024 19:56
von mr.b4
Hallo zusammen,

leider bekomme ich folgenden JSON String nicht eingelesen.

Code: Alles auswählen

[ { "cmd" : "GetAiState", "code" : 0, "value" : { "channel" : 0, "dog_cat" : { "alarm_state" : 0, "support" : 0 }, "face" : { "alarm_state" : 0, "support" : 0 }, "people" : { "alarm_state" : 0, "support" : 1 }, "vehicle" : { "alarm_state" : 0, "support" : 1 } } } ]
Ich vermute es liegt an den eckigen Klammern...

Ich habe einen String Channel erstellt, und würde einzelne Items als JSON definieren:
Zum Beispiel ein Switch Item mit folgenden JSONPath Ausdruck: value.people.alarm_state

Alle meine Versuche sind gescheitert.

Lustigerweise besteht die Notwenigkeit nur weil die eine Reolink Kamera 510A im IP-CAM-Binding nicht vernünftig will, die andere 520A funktioniert...

Re: Bekomme JSON String nicht eingelesen - Reolink Kamera

Verfasst: 1. Jun 2024 21:30
von Harka
Moin,
sollte mit
JSONPATH:$.[0].value.people.alarm_state
bzw.
JS: | JSON.parse(input).[0].value.people.alarm_state
funktionieren.

e: habe es gerade getestet -> mit JSONPATH funktioniert es hier sofort, auch mit den von Udos folgenden Tipps mit den Punkten. Bei Javascript läuft es mit JS:|JSON.parse(input)[0].value.people.alarm_state

Re: Bekomme JSON String nicht eingelesen - Reolink Kamera

Verfasst: 1. Jun 2024 23:53
von mr.b4
Danke für den Tipp.
Scheint mir auch plausibel das Array [] zu Anfang zu definieren...
Leider wird der Wert immer noch als "Null" angezeigt.

Re: Bekomme JSON String nicht eingelesen - Reolink Kamera

Verfasst: 2. Jun 2024 03:30
von udo1toni
Das JSON sieht, lesefreundlich formatiert, so aus:

Code: Alles auswählen

[
    {
        "cmd": "GetAiState",
        "code": 0,
        "value": {
            "channel": 0,
            "dog_cat": {
                "alarm_state": 0,
                "support": 0
            },
            "face": {
                "alarm_state": 0,
                "support": 0
            },
            "people": {
                "alarm_state": 0,
                "support": 1
            },
            "vehicle": {
                "alarm_state": 0,
                "support": 1
            }
        }
    }
]
Du hast also ein JSON, welches auf oberster Ebene ein Array aus (potenziell) mehreren Objekten nutzt. Mein Tipp (ich hab's nicht ausprobiert) wäre

Code: Alles auswählen

$[0].value.people.alarm_state
(also ohne Punkt zwischen $ und [)
Alternativ könntest Du auch

Code: Alles auswählen

$..value.people.alarm_state
versuchen, solche "Sonderformen" von JSON sind immer etwas tricky.

Eine andere Frage: Wie kommst Du zu dem JSON? Eventuell ist ja auch in der Abfrage etwas schief, und Du könntest das JSON ohne das Array ausgeliefert bekommen.

Re: Bekomme JSON String nicht eingelesen - Reolink Kamera

Verfasst: 2. Jun 2024 13:04
von mr.b4
Vielen Dank!

Code: Alles auswählen

$[0].value.people.alarm_state
jetzt läufts. Musste aber das ganze Item nochmal neu anlegen.