文字列を JSON に解析しようとすると、予期しないトークン エラーが発生します。
http://json.parser.online.fr/を使用して有効性をチェックしていますが、解析エラーは発生しませんが、予期しないトークンが原因で評価が失敗したと言っています。以下の JSON をその Web サイトに貼り付けると、エラーが検出されていることがわかりますが、原因となっているトークンは特定されていません。
これが私が解析しようとしているものです。
{
"Polish": {
"Rent": [
{
"english": "a",
"audioUrl": "b",
"alternate": "c"
},
{
"english": "d",
"audioUrl": "e",
"alternate": "f"
}
]
}
}
明らかな何かが欠けていますか?
編集
「Rent」キーの後の : と [ の間に印刷できない文字があります。
問題を引き起こしている可能性がある解析試行の前に、文字列に対していくつかの replace() 呼び出しを行っています。
特定の行が解析される前に
"Rent":"[
: と [ 記号の間の二重引用符を削除したい。
だから私は使用しています:
var reg = new RegExp('":"', 'g');
var newStr = originalStr.replace(reg, '":');
ただし、上記が印刷できない文字を引き起こしている理由はわかりません。
EDIT2
上記のreplace()呼び出しを削除してバリデーターに貼り付け、replace()を使用していた二重引用符を手動で削除しましたが、判読できない文字がまだ残っています。したがって、エラーは元の文字列に存在します。より多くのコード:|
文字列は、サーバー上にある PHP スクリプトへの ajax 呼び出しから返されます。PHP スクリプトはサーバー上のディレクトリを読み取り、ネストされた連想配列に値を入力して文字列を生成します。この文字列は JS 側に送り返され、JS 側で編集および解析されます (上記を参照)。
ディレクトリ内には JSON ファイルがあり、その内容をこのネストされた配列構造に挿入して、JSON 階層を完成させます。
読めなかった文字は
エフ bb BF
私がグーグルで調べたところ、ファイルの内容を表す文字列のバイトオーダーマークであることがわかりました。
ディレクトリとJSONファイルを読み取り、JSON_encode()dでネストされた配列構造を作成してJSに送り返すPHPコードを次に示します。
if ($langHandle = opendir($langDir)) {
while (false !== ($langEntry = readdir($langHandle))) {
$currentLangDir = $langDir . "/" . $langEntry;
if (is_dir($currentLangDir) && $langEntry != '.' && $langEntry != '..') {
$currentLang = array();
if ($currentLangHandle = opendir($currentLangDir)) {
while (false !== ($catEntry = readdir($currentLangHandle))) {
$currentCatFile = $currentLangDir . "/" . $catEntry;
if(is_file($currentCatFile) && $catEntry != '.' && $catEntry != '..') {
$currentCat = file_get_contents($currentCatFile);
$currentLang[removeFileExtension($catEntry)] = $currentCat;
}
}
}
$langArray[$langEntry] = $currentLang;
}
}
これらの不要な文字を修正するにはどうすればよいですか。BOM 文字を削除する方法をすばやく検索すると、それは悪いことであることがわかります。