json.prettyprint: Add a simple json prettyprinter.
parent
7d8d60ede3
commit
3f9ac2ad9f
|
@ -0,0 +1 @@
|
||||||
|
Doug Coleman
|
|
@ -0,0 +1,29 @@
|
||||||
|
! Copyright (C) 2016 Doug Coleman.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: io.streams.string json.prettyprint json.reader tools.test ;
|
||||||
|
IN: json.prettyprint.tests
|
||||||
|
|
||||||
|
[
|
||||||
|
"{
|
||||||
|
\"a\": 3
|
||||||
|
}"
|
||||||
|
] [
|
||||||
|
"{\"a\":3}" json> pprint-json>string
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[ "{ }" ] [ "{ }" json> pprint-json>string ] unit-test
|
||||||
|
[ "[ ]" ] [ "[ ]" json> pprint-json>string ] unit-test
|
||||||
|
[ "null" ] [ "null" json> pprint-json>string ] unit-test
|
||||||
|
[ "false" ] [ "false" json> pprint-json>string ] unit-test
|
||||||
|
[ "3" ] [ "3" json> pprint-json>string ] unit-test
|
||||||
|
[ "[
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
5
|
||||||
|
]" ] [ "[3,4,5]" json> pprint-json>string ] unit-test
|
||||||
|
|
||||||
|
[ "{
|
||||||
|
3: 30,
|
||||||
|
4: 40,
|
||||||
|
5: 50
|
||||||
|
}" ] [ "{3:30,4:40,5:50}" json> pprint-json>string ] unit-test
|
|
@ -0,0 +1,57 @@
|
||||||
|
! Copyright (C) 2016 Doug Coleman.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: assocs fry hashtables io io.encodings.utf8 io.files
|
||||||
|
io.streams.string json.reader json.writer kernel math namespaces
|
||||||
|
sequences strings ;
|
||||||
|
IN: json.prettyprint
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
SYMBOL: indent-level
|
||||||
|
CONSTANT: nspaces 2
|
||||||
|
|
||||||
|
GENERIC: pprint-json* ( obj -- )
|
||||||
|
|
||||||
|
: write-spaces ( -- )
|
||||||
|
indent-level get 0 > [
|
||||||
|
indent-level get nspaces *
|
||||||
|
CHAR: \s
|
||||||
|
<string> write
|
||||||
|
] when ;
|
||||||
|
|
||||||
|
M: object pprint-json* json-print ;
|
||||||
|
M: string pprint-json* json-print ;
|
||||||
|
M: f pprint-json* json-print ;
|
||||||
|
|
||||||
|
M: sequence pprint-json*
|
||||||
|
[
|
||||||
|
"[ ]" write
|
||||||
|
] [
|
||||||
|
"[" print
|
||||||
|
indent-level inc
|
||||||
|
[ "," print ] [ write-spaces pprint-json* ] interleave nl
|
||||||
|
indent-level dec
|
||||||
|
write-spaces "]" write
|
||||||
|
] if-empty ;
|
||||||
|
|
||||||
|
M: hashtable pprint-json*
|
||||||
|
dup assoc-empty? [
|
||||||
|
drop "{ }" write
|
||||||
|
] [
|
||||||
|
"{" print
|
||||||
|
indent-level inc
|
||||||
|
>alist
|
||||||
|
[ "," print ] [
|
||||||
|
first2 [ write-spaces pprint-json* ": " write ] [ pprint-json* ] bi*
|
||||||
|
] interleave nl
|
||||||
|
indent-level dec
|
||||||
|
write-spaces "}" write
|
||||||
|
] if ;
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
|
: pprint-json ( obj -- )
|
||||||
|
[ 0 indent-level ] dip '[ _ pprint-json* ] with-variable ;
|
||||||
|
|
||||||
|
: pprint-json>path ( json path -- ) utf8 [ pprint-json ] with-file-writer ;
|
||||||
|
: pprint-json>string ( json -- string ) [ pprint-json ] with-string-writer ;
|
||||||
|
: pprint-json-file ( path -- ) [ path>json ] [ pprint-json>path ] bi ;
|
Loading…
Reference in New Issue