Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #143901

Re: Static JSON parser for embedded

From Ben Bacarisse <ben.usenet@bsb.me.uk>
Newsgroups comp.lang.c
Subject Re: Static JSON parser for embedded
Date 2019-05-17 21:33 +0100
Organization A noiseless patient Spider
Message-ID <875zq8g6sd.fsf@bsb.me.uk> (permalink)
References (5 earlier) <XIBDE.241096$SH1.40745@fx03.am4> <d3002c74-f4d0-4a50-a524-a4dfe608d4fb@googlegroups.com> <9pCDE.1896414$oQj.765689@fx12.am4> <f679af44-a318-4d7c-bab0-7ed7057bba22@googlegroups.com> <nhDDE.390434$v12.194373@fx29.am4>

Show all headers | View raw


Bart <bc@freeuk.com> writes:

> On 17/05/2019 19:16, Rick C. Hodgin wrote:
>> On Friday, May 17, 2019 at 1:43:47 PM UTC-4, Bart wrote:
>>> On 17/05/2019 18:21, Rick C. Hodgin wrote:
>>>> Might make a good comp.lang.c coding challenge.
>>>
>>> Maybe, but the whole thing is rather open-ended.
>>
>> Let's define it.
>>
>>      1)  The user provides a structure.  Format must be per line:
>>              field_name, type[, optional]
>
> This part is not clear. I think he prefers this structure to be
> defined as normal C code. If that's too hard, then an alternative can
> be used.
>
> But I don't think what you have is sufficient:
>
> What are the possibilities for 'type'?

My favourite is functions (or function pointers in C).  The OP
presumably has no need for these since JSON can't represent them.  They
make sense (and are indeed very useful) in remote procedure calls.

> The OP's example included
> 'char[32]' and 'int[8]' and 'unsigned int'. Just how elaborate can
> these get? And what size is 'int' anyway?

I'd be surprised if the size really matters.  You know what type is
needed to represent a number in the "input" (it's a double precision
IEEE floating point number) and the generated code will simply convert
that to whatever numeric type the corresponding struct member has.  The
specification should say what happens in anomalous situations like a
negative source and an unsigned target or a fractional source and an
integral target and so on, but the "size" of int is really a matter of
whether the input should be checked for out of range values.  That may
not even be part of the requirements.

> How do you deal with nested structs?

I'm getting a strong sense of déjà vu here.  I did this (twice, in fact)
in the early 80s for a remote procedure call mechanism, first in C and
then again in Common Lisp (way more fun!).  There is a huge literature
about "argument marshalling" for RPC and there are almost certainly
JSON-based RPC mechanisms out there.  That might help in a search for
existing code.

>>      2)  Must be able to receive input data like this:
>>              field_name = data
>
> I don't remember this was part of the requirement. Is this C code?
>
>>      3)  Must generate output JSON.
>
> I don't remember this part either!

Nor I (to both of the above).

> You have to tentatively read a field tag, and try and match it with
> one of the fields of the struct. It has to be more table-driven, but
> in that case, it is more the data that is hard-coded rather than the
> parsing code.

There's going to a spectrum from a solution where bespoke C functions
get generated for every case, to one where a generic parser uses a
table of auxiliary data to assign value to struct members.

-- 
Ben.

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-05-17 09:20 +0200
  Re: Static JSON parser for embedded Jorgen Grahn <grahn+nntp@snipabacken.se> - 2019-05-17 08:48 +0000
    Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-05-17 11:06 +0200
      Re: Static JSON parser for embedded Jorgen Grahn <grahn+nntp@snipabacken.se> - 2019-05-17 11:22 +0000
        Re: Static JSON parser for embedded Thiago Adams <thiago.adams@gmail.com> - 2019-05-17 04:40 -0700
          Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-05-17 14:10 +0200
            Re: Static JSON parser for embedded Thiago Adams <thiago.adams@gmail.com> - 2019-05-17 05:18 -0700
              Re: Static JSON parser for embedded Jorgen Grahn <grahn+nntp@snipabacken.se> - 2019-05-18 18:18 +0000
        Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-05-17 14:10 +0200
          Re: Static JSON parser for embedded Jorgen Grahn <grahn+nntp@snipabacken.se> - 2019-05-18 18:22 +0000
  Re: Static JSON parser for embedded Bart <bc@freeuk.com> - 2019-05-17 11:39 +0100
    Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-05-17 13:19 +0200
      Re: Static JSON parser for embedded Thiago Adams <thiago.adams@gmail.com> - 2019-05-17 05:09 -0700
        Re: Static JSON parser for embedded Thiago Adams <thiago.adams@gmail.com> - 2019-05-17 05:15 -0700
      Re: Static JSON parser for embedded Bart <bc@freeuk.com> - 2019-05-17 15:06 +0100
        Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-05-17 16:37 +0200
          Re: Static JSON parser for embedded Bart <bc@freeuk.com> - 2019-05-17 17:56 +0100
            Re: Static JSON parser for embedded "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2019-05-17 10:21 -0700
              Re: Static JSON parser for embedded Bart <bc@freeuk.com> - 2019-05-17 18:43 +0100
                Re: Static JSON parser for embedded Thiago Adams <thiago.adams@gmail.com> - 2019-05-17 10:58 -0700
                Re: Static JSON parser for embedded "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2019-05-17 11:16 -0700
                Re: Static JSON parser for embedded Bart <bc@freeuk.com> - 2019-05-17 19:43 +0100
                Re: Static JSON parser for embedded "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2019-05-17 11:57 -0700
                Re: Static JSON parser for embedded Bart <bc@freeuk.com> - 2019-05-17 20:11 +0100
                Re: Static JSON parser for embedded "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2019-05-17 12:22 -0700
                Re: Static JSON parser for embedded Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-05-17 21:33 +0100
                Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-05-18 00:11 +0200
            Re: Static JSON parser for embedded Bart <bc@freeuk.com> - 2019-05-17 22:33 +0100
              Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-05-18 00:17 +0200
                Re: Static JSON parser for embedded Bart <bc@freeuk.com> - 2019-05-18 01:25 +0100
            Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-05-17 23:43 +0200
  Re: Static JSON parser for embedded Thiago Adams <thiago.adams@gmail.com> - 2019-05-17 04:38 -0700
  Re: Static JSON parser for embedded "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2019-05-17 07:38 -0700
    Re: Static JSON parser for embedded Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2019-05-17 08:05 -0700
      Re: Static JSON parser for embedded "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2019-05-17 08:15 -0700
      Re: Static JSON parser for embedded Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2019-05-17 11:53 -0400
  Re: Static JSON parser for embedded Ian Collins <ian-news@hotmail.com> - 2019-05-18 15:33 +1200
    Re: Static JSON parser for embedded Bart <bc@freeuk.com> - 2019-05-18 11:57 +0100
  Re: Static JSON parser for embedded Clifford Heath <no.spam@please.net> - 2019-05-18 17:14 +1000
    Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-05-18 16:03 +0200
      Re: Static JSON parser for embedded Clifford Heath <no.spam@please.net> - 2019-05-19 09:12 +1000
        Re: Static JSON parser for embedded Niklas Holsti <niklas.holsti@tidorum.invalid> - 2019-05-19 17:13 +0300
          Re: Static JSON parser for embedded Clifford Heath <no.spam@please.net> - 2019-05-20 09:25 +1000
        Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-06-06 11:12 +0200
          Re: Static JSON parser for embedded Clifford Heath <no.spam@please.net> - 2019-06-07 09:11 +1000
            Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-06-07 08:59 +0200
              Re: Static JSON parser for embedded Clifford Heath <no.spam@please.net> - 2019-06-12 09:41 +1000
    Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-06-05 16:44 +0200
      Re: Static JSON parser for embedded Clifford Heath <no.spam@please.net> - 2019-06-06 09:27 +1000
        Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-06-06 09:50 +0200
          Re: Static JSON parser for embedded Clifford Heath <no.spam@please.net> - 2019-06-07 09:08 +1000
      Re: Static JSON parser for embedded Clifford Heath <no.spam@please.net> - 2019-06-06 09:48 +1000
        Re: Static JSON parser for embedded pozz <pozzugno@gmail.com> - 2019-06-06 09:54 +0200

csiph-web