Deutsch   English   Français   Italiano  
<v282rt$29k5f$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Malcolm McLean <malcolm.arthur.mclean@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: Which newsgroup for json parsing?
Date: Fri, 17 May 2024 18:07:09 +0100
Organization: A noiseless patient Spider
Lines: 87
Message-ID: <v282rt$29k5f$1@dont-email.me>
References: <la1bjoF2anmU1@mid.individual.net> <v25c4k$1lhfu$1@dont-email.me>
 <lamvvbFb0g2U1@mid.individual.net> <MCs1O.681$29Ia.396@fx13.iad>
 <v25mbn$1njma$1@dont-email.me> <v26m61$2127k$1@dont-email.me>
 <v28175$29d9i$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Fri, 17 May 2024 19:07:10 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="1b1ca21d30aeebfc2b6e6baded786e38";
	logging-data="2412719"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18yimiUTDJzTP2GZoe7esjRXLTVQjxYgwc="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:fdtcKjBhvDRf6tzOQzfJimmsx/I=
Content-Language: en-GB
In-Reply-To: <v28175$29d9i$1@dont-email.me>
Bytes: 4445

On 17/05/2024 17:39, jak wrote:
> Malcolm McLean ha scritto:
>> On 16/05/2024 20:21, bart wrote:
>>> On 16/05/2024 19:53, Scott Lurndal wrote:
>>>> =?UTF-8?Q?Josef_M=C3=B6llers?= <josef@invalid.invalid> 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
>>
> 
> Don't you think it is overkill to use a compiler of compilers to parse a
> Json?  The function I wrote for parse the Json is just 140 code lines in
> C, while I found examples with much more bulky with lex & yacc.
> 
> 
Yes. I did't use lex and yacc.

I wrote a lexer in top of a strem of characters, the I coded the 
recursive decent parser by hand, with each rule a separate function.

Here's the new code
https://github.com/MalcolmMcLean/xmltocsv

And here's the old code it replaced
https://github.com/MalcolmMcLean/babyxrc/blob/master/src/xmlparser.c
https://github.com/MalcolmMcLean/babyxrc/blob/master/src/xmlparser.h


-- 
Check out Basic Algorithms and my other books:
https://www.lulu.com/spotlight/bgy1mm