Hey Alex, Since json.l is available in standard library, I'd prefer to use it :) Regards, Kashyap
On Thu, May 9, 2019 at 1:08 AM Alexander Williams <[email protected]> wrote: > If you're just trying to work with the decimal numbers in PicoLisp, then > why not just use fixed-point? > > You can modify my json.l and specify a 20 digit decimal, and then parse > your file. The result will be strings instead of numbers, but it works > fine. Here's a > patch: > > > diff --git a/json.l b/json.l > index 551e3a9..a135c39 100644 > --- a/json.l > +++ b/json.l > @@ -6,6 +6,8 @@ > > (setq *Json_control_characters (extract '((N) (unless (member N '("^H" > "^L" "^J" "^M" "^I")) N)) (mapcar char (range 1 31)))) > > +(scl 20) > + > # send error message to STDERR > [de json-err-throw (Error) > (msg Error) > @@ -112,7 +114,7 @@ > ((= "[" Type) (make (link T) (json-link-array))) > ((= "{" Type) (make (json-link-object))) > ((lst? Type) (pack Type)) > - ((num? Type) Type) > + ((num? Type) (format Type *Scl)) > ((= "-" Type) (if (num? (car *Json)) (format (pack "-" (pop > '*Json))) (json-iterate-object))) > ((= 'true Type) 'true) > ((= 'false Type) 'false) > > > -- Try that against my latest git commit to > https://github.com/aw/picolisp-json (tag v4.0.0) > > > AW > > On Wed, 8 May 2019, C K Kashyap wrote: > > > Perfect!!!! - It is pure bliss to see such concise code. > > Regards, > > Kashyap > > > > On Wed, May 8, 2019 at 6:59 AM Alexander Burger <[email protected]> > wrote: > > > >> On Wed, May 08, 2019 at 09:17:54AM +0200, Alexander Burger wrote: > >>> Yes, "123.0.0" is not a legal number. > >>>> I am sure there must a better way to do the lengthy "0"..."9" that > I've > >>>> done :) > >> > >> The best is to avoid at all looping over the characters, because > built-ins > >> are a > >> lot faster than individual function calls in a loop. > >> > >> What I would do here is > >> > >> (pipe > >> (in '("curl" "-s" " > >> https://api.iextrading.com/1.0/stock/aapl/chart/3m") > >> (while > >> (prin > >> (echo "close" "volume" "unadjustedVolume") ) > >> (when (prin (till "," "}")) > >> (or (sub? "." @) (prin ".")) ) ) ) > >> (readJson) ) > >> > >> The trick is to read the digits with 'till', print them, and *then* > check > >> if a > >> dot is needed. > >> > >> ☺/ A!ex > >> > >> -- > >> UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe > >> > >
