Issue title: Ambiguous error message: "Expected object but got object" when passing an array
 Issue body: I got this error when accidentally passing an array in package.json. 

It happens because the "but got..." uses `typeof value`, which returns "object" for arrays.
Maybe instead of using "typeof" for the error message, using `Object.prototype.toString.call(value)` is better? or something else which would distinguish an array from an object..

Sounds like a small problem but it took me a while to find my package.json error, due to the unclear error message.
 Comments: 
 Comment 0: Yeah, this is super annoying I agree.
 Comment 1: Landed in v1.0.3.
{'source': 'GithubIssues', 'repo_name_with_owner': 'iarna/aproba', 'issue_id': 138958532, 'repo_stars': 133.0}