Post by Josef MöllersHi all,
I am trying to parse a json string received through MQTT from a "Shelly
Plug S", e.g.
{"id":0, "source":"button", "output":true, "apower":0.0,
"voltage":237.9, "current":0.000,
"aenergy":{"total":0.000,"by_minute":[0.000,0.000,0.000],"minute_ts":1715172119},"temperature":{"tC":41.1, "tF":106.0}}
I am trying to use libjson-glib but I can't figure out what to use as
the first argument to json_gobject_from_data()!
I am also looking at libjson-c but cannot find any examples that could
guide me.
F'up to self, also to answer a few questions.
First of all, I have switched to libjson-c5 The code I'm using looks
like this:
/* Requires: libjson-c-dev */
# include <json.h>
# include <json_tokener.h>
:
static void
xlate(unsigned int plug, unsigned int sw, const char *payload, char *item)
{
struct json_tokener *tok;
struct json_object *obj1, *obj2;
tok = json_tokener_new();
obj1 = json_tokener_parse_ex(tok, payload, strlen(payload));
if (json_object_object_get_ex(obj1, item, &obj2) && obj2 != NULL)
{
json_bool b;
enum json_type t;
switch (t = json_object_get_type(obj2))
{
case json_type_boolean:
b = json_object_get_boolean(obj2);
:
Anton referred to the many sites that have documentation.
Yes, you're absolutely right. There are many sites that have
documentation, but I found that they were not easy to spot. It usually
depends upon my state of mind AND the correct queries to send to Aunt
Google. I am usually glad for some code examples that help me up the
first step and where I can build upon. I have myself written a few
magazine articles and a lot of internal documentation for my employers
on various programming and architectural topics that aim at people who
start working with new-ish hardware, eg microcontrollers to get at least
a square wave output on a pin or some "Hello, World!" on a UART.
Post by Josef MöllersJSON parsing is the sort of thing you can easily do in C, but you
really don't want to do yourself, becuase it is a lot of fiddly code
to write, and everyone wants to solve exactly the same problem, which
is to query text formatted as JSON, usually for fields whose names and
types are known, but with facilities to list fields onthe fly.
Yes, that was exactly my idea when writing the program: why come up with
something new when there is existing code to build upon.
To answer jak's question:
This is code solely for myself to translate a json string I receive from
a Shelly Plug S into separate MQTT topics for the various items in the
string, most important "output", but also "voltage" and "apower".
Most of my handlers rely on the fact that a topic carries only a single
payload value, not a json object.
Thanks to all for helping!
Josef