Skip to content

jjrscott/JSONTokenizer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JSONTokenizer

JSONTokenizer is a project design to demonstrate parsing JSON using Swift's awesome regular expression support. It might also be useful if you wish to handle broken JSON when you don't have a choice. JSONTokenizer leaves as much as it can for you to deal with yourself. Good Luck!

Examples

Normal object

{
  "Hello" : "World"
}
.object([(key: .string("Hello"), value: .string("World"))])

Weird object

JSONTokenizer doesn't care that an object's key is a quoted string, just that it's a valid JSONToken. Therefore the following is valid:

{
  ["Hello"] : "World"
}
.object([(key: .array([.string("Hello")]), value: .string("World"))])

Null, booleans and numbers

JSONTokenizer doesn't handle null, booleans and numbers, it just captures them as barewords for you to handle as you wish. This avoids any preprocessing Swift might do (ie, treat 0 and 0.0 as identical)

[
  null,
  true,
  10e-30,
  0,
  0.0   
]
.array([.bareword("null"), .bareword("true"), .bareword("10e-30"), .bareword("0"), .bareword("0.0")])

Inside a regular expression

JSONTokenizer can also be used directly in a regular expression as it conforms to RegexComponent.

let token = Reference(JSONToken.self)
let regex = Regex {
    "Hello"
    OneOrMore(.whitespace)
    Capture(as: token) {
        JSONTokenizer()
    }
    OneOrMore(.whitespace)
    "World"
}

let input = """
Hello ["small", "big"] World
"""

let result = try regex.wholeMatch(in: input)

print(result![token])
.array([.string("small"), .string("big")])

About

Tokenize weird JSON using Swift's awesome regular expression support

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages