# cJSON parser: Clarion port

**URL:** <https://clarionhub.com/t/cjson-parser-clarion-port/2144>\
**Category:** code\
**Tags:** json\
**Created:** [October 3, 2018, 3:04pm UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144 "2018-10-03T15:04:46Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mike\_Duglas](https://clarionhub.com/user_avatar/clarionhub.com/mike_duglas/32/1061_2.png) [@Mike\_Duglas](https://clarionhub.com/u/Mike_Duglas)\
**Post date:** [October 3, 2018, 3:04pm UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144/1 "2018-10-03T15:04:46Z")

</div>

[cJSON](https://github.com/DaveGamble/cJSON) is ultralightweight JSON parser in ANSI C. This repository contains cJSON port to Clarion:

> **[GitHub - mikeduglas/cJSON: Clarion port of cJSON parser](https://github.com/mikeduglas/cJSON)**
>
> Clarion port of cJSON parser

The documentation can be found [here](https://github.com/mikeduglas/cJSON/blob/master/howto.md)

---

<div class="post-metadata">

**Author:** ![Mike\_Duglas](https://clarionhub.com/user_avatar/clarionhub.com/mike_duglas/32/1061_2.png) [@Mike\_Duglas](https://clarionhub.com/u/Mike_Duglas)\
**Post date:** [October 29, 2018, 6:27pm UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144/2 "2018-10-29T18:27:25Z")

</div>

v1.09 is available, now different encodings (code pages) are supported.

---

<div class="post-metadata">

**Author:** ![Mike\_Duglas](https://clarionhub.com/user_avatar/clarionhub.com/mike_duglas/32/1061_2.png) [@Mike\_Duglas](https://clarionhub.com/u/Mike_Duglas)\
**Post date:** [November 20, 2022, 7:17pm UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144/3 "2022-11-20T19:17:56Z")

</div>

There have been many updates over the past 4 years. Actual version is 1.24.

---

<div class="post-metadata">

**Author:** ![Mike\_Duglas](https://clarionhub.com/user_avatar/clarionhub.com/mike_duglas/32/1061_2.png) [@Mike\_Duglas](https://clarionhub.com/u/Mike_Duglas)\
**Post date:** [December 25, 2024, 7:06am UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144/4 "2024-12-25T07:06:53Z")

</div>

There have been many updates over the past 2 years. Actual version is 1.50.  
Also there is an utility for creating a Clarion data structure corresponding to the json structure:

> **[GitHub - mikeduglas/cJSON\_Mapper: An utility for creating a Clarion data structure...](https://github.com/mikeduglas/cJSON_Mapper)**
>
> An utility for creating a Clarion data structure corresponding to the json structure.

Merry Christmas!

---

<div class="post-metadata">

**Author:** ![carlos.pizzi](https://clarionhub.com/user_avatar/clarionhub.com/carlos.pizzi/32/2633_2.png) [@carlos.pizzi](https://clarionhub.com/u/carlos.pizzi)\
**Post date:** [December 25, 2024, 7:49am UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144/5 "2024-12-25T07:49:25Z")

</div>

Hello Mike,

I want to sincerely thank you for the valuable contribution you have made. I really appreciate it and certainly recognize the great effort that has gone into its development.

Once again, thank you very much for your dedication and support.

Merry Christmas and New Year

---

<div class="post-metadata">

**Author:** ![jkuijt](https://clarionhub.com/user_avatar/clarionhub.com/jkuijt/32/6168_2.png) [@jkuijt](https://clarionhub.com/u/jkuijt)\
**Post date:** [December 25, 2024, 8:10am UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144/6 "2024-12-25T08:10:48Z")

</div>

Thank you Mike for your great tools and excellent support!

Merry Christmas!

Best regards  
Jeffrey

---

<div class="post-metadata">

**Author:** ![Gustavo\_Saracca](https://clarionhub.com/user_avatar/clarionhub.com/gustavo_saracca/32/5355_2.png) [@Gustavo\_Saracca](https://clarionhub.com/u/Gustavo_Saracca)\
**Post date:** [December 25, 2024, 3:30pm UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144/7 "2024-12-25T15:30:49Z")

</div>

I agree with Carlos and Jeffrey about your excellent work with this version of cJson and now with the cJson Mapper.  
Excellent work that makes Clarion a very suitable environment for any modern development.

Merry Christmas  
Gustavo.

---

<div class="post-metadata">

**Author:** ![Flavio\_Suarez](https://clarionhub.com/user_avatar/clarionhub.com/flavio_suarez/32/1347_2.png) [@Flavio\_Suarez](https://clarionhub.com/u/Flavio_Suarez)\
**Post date:** [January 10, 2025, 2:31pm UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144/8 "2025-01-10T14:31:45Z")

</div>

I agree and thank you too for your great work, Mike!!

---

<div class="post-metadata">

**Author:** ![jorge-paladino](https://clarionhub.com/user_avatar/clarionhub.com/jorge-paladino/32/2847_2.png) [@jorge-paladino](https://clarionhub.com/u/jorge-paladino)\
**Post date:** [January 10, 2025, 2:42pm UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144/9 "2025-01-10T14:42:23Z")

</div>

Congratulations Mike and thank you very much!!

---

<div class="post-metadata">

**Author:** ![carlos.pizzi](https://clarionhub.com/user_avatar/clarionhub.com/carlos.pizzi/32/2633_2.png) [@carlos.pizzi](https://clarionhub.com/u/carlos.pizzi)\
**Post date:** [April 24, 2025, 11:18pm UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144/10 "2025-04-24T23:18:08Z")

</div>

Hello everyone!!

Here I am, always struggling with JSON, haha!

I’m working with “cJSON mapper” and I have a question about the JSON I’m trying to read.

“respuesta”, “comprobantesFiscales”, “comprobantes”, “otrosComprobantes” are arrays.

Should they be QUEUED in the “MyObject” structure?

Thanks

```PROGRAM

  INCLUDE('cjson.inc'), ONCE
  MAP
    INCLUDE('printf.inc'), ONCE
  END

sJson STRING('' |
    & '{{' |
    & ' "estado": "ok",' |
    & ' "respuesta": [{{' |
    & ' "puntoventa": 1,' |
    & ' "emision": "CAE",' |
    & ' "comprobantesFiscales": [{{' |
    & ' "codigoTipoComprobante": 6,' |
    & ' "comprobantes": [{{' |
    & ' "monto": 5200,' |
    & ' "numeroNodo": 1,' |
    & ' "numeroTransaccion": 6,' |
    & ' "numeroComprobante": 133,' |
    & ' "horaEmision": "112404"' |
    & ' }]' |
    & ' }]' |
    & ' }, {{' |
    & ' "puntoventa": 1,' |
    & ' "emision": "OTROS",' |
    & ' "otrosComprobantes": [{{' |
    & ' "codigoTipoComprobante": 80,' |
    & ' "comprobantes": [{{' |
    & ' "numeroComprobante": 1,' |
    & ' "horaEmision": "112520"' |
    & ' }]' |
    & ' }]' |
    & ' }]' |
    & '}')

MyObject GROUP
estado STRING(2), NAME('estado')
respuesta GROUP,DIM(2), NAME('respuesta')
puntoventa LONG, NAME('puntoventa')
emision STRING(8), NAME('emision') ! max string(5)
comprobantesFiscales GROUP,DIM(2), NAME('comprobantesFiscales') ! max array[1]
codigoTipoComprobante LONG, NAME('codigoTipoComprobante')
comprobantes GROUP,DIM(2), NAME('comprobantes') ! max array[1]
monto LONG, NAME('monto')
numeroNodo LONG, NAME('numeroNodo')
numeroTransaccion LONG, NAME('numeroTransaccion')
numeroComprobante LONG, NAME('numeroComprobante')
horaEmision STRING(8), NAME('horaEmision') ! max string(6)
                                   END
                                 END
otrosComprobantes GROUP,DIM(2), NAME('otrosComprobantes') ! max array[1]
codigoTipoComprobante LONG, NAME('codigoTipoComprobante')
comprobantes GROUP,DIM(2), NAME('comprobantes') ! max array[1]
                                 END
                               END
                             END

jParser cJSONFactory
jRoot &cJSON, AUTO
  CODE
  !- JSON -> Clarion
  IF jParser.ToGroup(sJson, MyObject, FALSE, | 
      '')

    !- Clarion -> JSON
    jRoot &= json::CreateObject(MyObject, TRUE, | 
      '[{"name":"*","IgnoreEmptyObject":true,"IgnoreEmptyArray":true,"EmptyString":"ignore"},' & | 
      '{"name":["comprobantesFiscales","codigoTipoComprobante","numeroNodo","numeroTransaccion","numeroComprobante","horaEmision","otrosComprobantes"], "JsonName":"*"}]')
    IF NOT jRoot &= NULL
      !- check result in DebugView
      printd(jRoot.ToString(TRUE))
      jRoot.Delete()
    END
  END

```

---

<div class="post-metadata">

**Author:** ![Mike\_Duglas](https://clarionhub.com/user_avatar/clarionhub.com/mike_duglas/32/1061_2.png) [@Mike\_Duglas](https://clarionhub.com/u/Mike_Duglas)\
**Post date:** [April 25, 2025, 9:17am UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144/11 "2025-04-25T09:17:35Z")

</div>

The mapper generates GROUP,DIM structures for json arrays. If you want the QUEUEs instead, do it yourself. I mean: replace groups with typed queue references

---

<div class="post-metadata">

**Author:** ![carlos.pizzi](https://clarionhub.com/user_avatar/clarionhub.com/carlos.pizzi/32/2633_2.png) [@carlos.pizzi](https://clarionhub.com/u/carlos.pizzi)\
**Post date:** [April 25, 2025, 12:14pm UTC](https://clarionhub.com/t/cjson-parser-clarion-port/2144/12 "2025-04-25T12:14:13Z")

</div>

Hi Mike, Perfect!

I thought I had my ideas wrong.

Thanks so much!!
