オブジェクト キーを引用符で囲む必要があるため、JSON が適切にフォーマットされていません。以下が機能します。
var jsn = '{"test": true, "stringtest": "hallo"}';
JSON.parse(jsn);
編集: JSON 形式を指定する RFC4627 には、次のように記載されています。
2.2. オブジェクト
オブジェクト構造は、 0 個以上の名前と値のペア(またはメンバー) を囲む中かっこのペアとして表されます。名前は
文字列です。各名前の後にコロンを 1 つ付けて、名前
と値を区切ります。単一のコンマは、値とそれに続く
名前を区切ります。オブジェクト内の名前は一意である必要があります。
object = begin-object [ member *( value-separator member ) ]
end-object
member = string name-separator value
ご覧のとおり、JSON オブジェクトは名前と値のペアで構成されており、名前は文字列です。繰り返しますが、RFC は次のように述べています。
文字列の表現は、プログラミング言語の C ファミリーで使用される規則に似ています。 文字列は引用符で始まり、
引用符で終わります。すべての Unicode 文字は、エスケープする必要がある
文字 (引用符、逆ソリッド、および制御文字 (U+0000
から U+001F))
を除いて、引用符で囲むことができます。
文字列 = 引用符 *char 引用符
引用符 = %x22 ; "
したがって、RFC によると、キーは一重引用符ではなく二重引用符で囲む必要があります。それでも、一部のパーサーはより寛容で両方を受け入れる可能性があると思いますが、私は標準に固執します。