ParseJson

I need to parse some JSON, since it's an operation that can fail we use Either<E,A>

import { pipe } from "fp-ts/lib/pipeable";
import * as E from "fp-ts/lib/Either";
import * as A from "fp-ts/lib/Apply";

const dataToBeParsed = JSON.stringify({ firstJson: true });

pipe(
  E.parseJSON(dataToBeParsed, E.toError),
  E.fold(
    e => console.log(e),
    data => console.log(data)
  )
);
// {"firstJson":true}

What if I have two JSON to parse?

Here we can use Chain and Map in a naive way

import { pipe } from "fp-ts/lib/pipeable";
import * as E from "fp-ts/lib/Either";
import * as A from "fp-ts/lib/Apply";

const dataToBeParsed = JSON.stringify({ firstJson: true });
const secondDataToBeParsed = JSON.stringify({
  thisIsTheSecondJson: "Yes it is"
});

pipe(
  E.parseJSON(dataToBeParsed, E.toError),
  E.chain(one =>
    pipe(
      E.parseJSON(secondDataToBeParsed, E.toError),
      E.map(two => [one, two])
    )
  ),
  E.fold(
    e => console.log(e),
    data => console.log(data)
  )
);
// [{"firstJson":true},{"thisIsTheSecondJson":"Yes it is"}]

As you can see this does not scale very well so we can use SequenceT to have the Eitheras arguments and parse the two JSON

You can find the code for this example here in the example.ts file

Last updated

Was this helpful?