タイトルのとおり、JSONの中身がプレーンオブジェクトとは限りません。配列だけかもしれないし、数値だけかもしれません。
※プレーンオブジェクト:↓こんなやつ
{
"aa": "bb"
}
どういうこと?
VS CodeでJSONファイルを作って適当に「aaa」と入れると、「Expected a JSON object, array or literal.」という警告が表示されます。「aaa」と書いただけのファイルは無効なJSONファイルですが、警告のとおり、JSONオブジェクト、配列またはリテラルなら何でも入れられます。
たとえば、これらは左上の「aaa」以外すべて有効なJSONファイルです。また、画像にはありませんが、null
のみでも有効です。
実際MDNには、文字列や数値だけでも有効なJSONになると書かれています。
JSONは、配列やオブジェクトだけでなく、 JSON 内部に入れることができるあらゆるデータ型のデータだけでも有効なものになります。つまり、例えば、単一の文字列や数値も有効な JSON となります。
また、TypeScriptのJSON.parse()
の戻り値の型がany
なのは、JSONの中身がobject
型とは限らないからと思われます。
まとめ
JSONファイルの中身は数値だけかもしれないし、真偽値だけかもしれません。プレーンオブジェクトとは限らないので、プレーンオブジェクト前提の処理を書くと困ることがあるかもしれません。