Skip to content

Latest commit

 

History

History

README.md

@abapify/asjson-parser

version

ABAP asJSON (canonical JSON representation) parser.

asJSON - Canonical JSON Representation

General asJSON format is based on %heap object delivering values and type metadata

So when we have a code like this:

REPORT ZTEST_HEAP.

start-of-selection.

types:
  begin of payload_ts,
    i type i,
    i_ref type ref to i,
  end of payload_ts.


  data(payload) = value payload_ts(
    i = 123
    i_ref = new #( 123 )
  ).

  data(json) = cl_sxml_string_writer=>create( if_sxml=>co_xt_json ).

  call transformation id
  source data = payload
        result xml json.

  cl_demo_output=>display_json( json = json->get_output( ) ).

the output it generates will be:

{
 "DATA":
 {
  "I":123,
  "I_REF":
  {
   "%ref":"#d1"
  }
 },
 "%heap":
 {
  "d1":
  {
   "%type":"xsd:int",
   "%val":123
  }
 }

The following library allows us to parse this payload as if we would deal with a regular ABAP object without data references

The code below

import { parse } from '@abapify/asjson-parser';
const parser;
console.log(parse(json));

would print the object like this:

{
 "DATA":
 {
  "I":123,
  "I_REF": 123
 }

Usage

  • as a parser
import { parse } from '@abapify/asjson-parser';
console.log(parse(json));
  • as a transformer
import { transform } from '@abapify/asjson-parser';
const object = JSON.parse(json);
console.log(transform(object));
  • as a proxy (returns a proxied object)
import { proxy } from '@abapify/asjson-parser';
const object = JSON.parse(json);
console.log(proxy(object));