JSON-Objekt parsen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
LuckyJoe
Posts: 265
Joined: 02 Oct 2013, 09:52

JSON-Objekt parsen

25 Dec 2016, 04:54

Hallo zusammen,

Frohe Weihnachten - und eine Frage zum Parsen von JSON-formatierten Inhalten. Ich habe dazu das Tool "JSON.ahk" (https://github.com/cocobelgica/AutoHotkey-JSON) eingebunden. Auch komme ich mit einigen Beispielen sehr gut zurecht:

Code: Select all

#NoEnv
#SingleInstance, Force
#Include JSON.ahk

json_str =
(
{
	"sensors": {
		"8": {
			"state": {
				"status": 0,
				"lastupdated": "2016-12-19T18:15:05"
			},
			"config": {
				"on": true,
				"reachable": true
			},
			"name": "MotionSensor 6.Companion",
			"type": "CLIPGenericStatus",
			"modelid": "PHA_STATE",
			"manufacturername": "Philips",
			"swversion": "1.0",
			"uniqueid": "MotionSensor 6.Companion",
			"recycle": true
		}
	}
}
)
parsed := JSON.Load(json_str)
Msgbox % parsed.sensors.8.state.status "`n" parsed.sensors.8.config.on "`n" parsed.sensors.8.name
Wie kann ich aber folgende Quelle auswerten (ob "on" auf "true" oder "false" steht):

Code: Select all

json_str =
(
[
	{
		"success": {
			"/sensors/8/config/on": true
		}
	}
]
)
Ich habe hier offensichtlich zwei Probleme: zum einen beginnt der String mit "[" und endet mit "]" statt mit "{" und "}", zum zweiten müssen wohl die "/" 'ge-escaped' (oder wie nennt man das?) werden. Beides bekomme ich nicht hin. Ich vermute mal, Regex wäre mein Freund ... oder? Aber mit dem stehe ich immer noch auf Kriegsfuss. :roll:
Mit "InStr()" kann ich den String natürlich auswerten, aber ich möchte eigentlich die Nähe zur JSON-Syntax behalten.

Danke schon mal im Voraus für eure Unterstützung
Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
nnnik
Posts: 4461
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: JSON-Objekt parsen

25 Dec 2016, 05:42

Hi
Eckige Klammern haben dieselbe Bedeutung in JSON wie in AutoHotkey, es sind Arrays.

Code: Select all

 Msgbox % ["eins","zwei"."drei"].2
Wenn ein Schlüssel Sonderzeichen enthält kannst du dynamisch darauf zugreifen.

Code: Select all

Array["&gurgelbrützelumpf"]
Recommends AHK Studio
just me
Posts: 7114
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: JSON-Objekt parsen

25 Dec 2016, 05:47

Frohe Weihnachten!

Ich habe mich mit JSON noch nicht weiter beschäftigt, aber nach einem kurzen Test denke ich Folgendes (und das funktioniert hier auch):

Was Du da hast, ist ein namenloses JSON-Array mit einem Element, einem JSON-Objekt.
Das erste (hier einzige) Element des Arrays wird über den Index 1 angesprochen. Danach geht es weiter wie gewohnt. Wenn Du für den Zugriff auf das AHK-Objekt die Arraysyntax verwendest, ist das recht unproblematisch und sieht so aus:

Code: Select all

json_str =
(
[
	{
		"success": {
			"/sensors/8/config/on": true
		}
	}
]
)

parsed := JSON.Load(json_str)

MsgBox, % parsed[1, "success", "/sensors/8/config/on"]
nnnik war schneller!
User avatar
LuckyJoe
Posts: 265
Joined: 02 Oct 2013, 09:52

Re: JSON-Objekt parsen

25 Dec 2016, 06:19

... aaaaahhhh! ... Wieder etwas mehr Licht in meiner Schattenwelt.
Danke an euch beide!

VG - Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
haichen
Posts: 467
Joined: 09 Feb 2014, 08:24

Re: JSON-Objekt parsen

25 Dec 2016, 11:17

Das geht auch:

Code: Select all

MsgBox, % parsed.1.success["/sensors/8/config/on"]

x=/sensors/8/config/on
MsgBox, % parsed.1.success[x]
:xmas:
User avatar
LuckyJoe
Posts: 265
Joined: 02 Oct 2013, 09:52

Re: JSON-Objekt parsen

25 Dec 2016, 13:12

Danke! ... Das Licht in meiner Schattenwelt wird ja immer heller ;-)
Herzliche Grüße aus dem Rheinland
Lucky Joe

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 31 guests