Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Malcolm McLean Newsgroups: comp.lang.c Subject: Re: Which newsgroup for json parsing? Date: Fri, 17 May 2024 05:24:31 +0100 Organization: A noiseless patient Spider Lines: 57 Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Fri, 17 May 2024 06:24:33 +0200 (CEST) Injection-Info: dont-email.me; posting-host="1b1ca21d30aeebfc2b6e6baded786e38"; logging-data="2132212"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18Ki84sjJdcWLkTtuk9WUvAjRKclUAXI/8=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:oJWbMKrKITK08SigmvjjD3tpPpk= In-Reply-To: Content-Language: en-GB Bytes: 3389 On 16/05/2024 20:21, bart wrote: > On 16/05/2024 19:53, Scott Lurndal wrote: >> =?UTF-8?Q?Josef_M=C3=B6llers?= writes: >>> On 16.05.24 18:27, Mikko wrote: >>>> On 2024-05-08 13:04:56 +0000, Josef Möllers said: >>>> >>>>> Hi 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. >>>>> >>>>> Thanks in advance, >>>> >>>> Sometimes it is easier to make a parser than to use an existing one. >>>> In this case I might try LEX. >>>> >>> >>> Sorry to be nitpicking, but lex is a "lexical analyzer" aka a "scanner", >>> it can only recognize tokens, eg the brackets, quotes, identifiers etc, >>> but not structures. >>> "yacc" (or its "bison" equivalent" would be a parser but definitely too >>> heavy. >>> >>> What one could do would be to use LEX to recognize the tokens and the >>> write a recursive descent parser in plain C. >> >> I've done full expression parsing and subsequent evaluation with >> lex (or flex).  No parser needed. >> > > You've done 'full expression PARSING', then you say 'No PARSER needed'. > > A bit contradictory? > > Clearly parsing IS needed, so either you've used LEX from code that acts > as a parser, or it does more than just recognise tokens. > Yes. I took Ben's advice and completely rewrote my XML parser wirh a formal lexer and recursive descent grammar. It was good idea, even though XML is simple enough to get away with a ad hoc approach. Similarly, with JSON. once you've lexed into identifiers, values, and curly and square btackets, the grammar is so simple that you almost don't notice that you are writing a parser. -- Check out Basic Algorithms and my other books: https://www.lulu.com/spotlight/bgy1mm