You can't build a state machine that "parses" json, because state machines technically cannot match nested parentheses.
You can build a push-down automaton (PDA), using a stack to track the parentheses. If you do that by hand, you'll be building something like an LR(0) parser.
If you are going to do that, it is easier to use an LALR parser generator which
will take the grammar and build the PDA for you.
You can also write your own recursive descent parser by "compiling" the grammar rules in a recognizer. For JSON, this is a pretty reasonable thing to do; the langauge isn't that complicated. See my SO answer on how to build a recursive descent parser.