サーバーからJSONでデータを取得する必要があります。データセットは非常に巨大で、複数レベルのネストがあります。私は配列を使う。そして配列の中のいくつかのキーはJSON文字列です(これらの文字列からJSオブジェクトを後で作成するために、これらの文字列をデータベース内に格納する必要があります)。PHP json_encode()とJavascript JSON.parse()
Array(
'key1'=> 'value1',
'key2'=> 'string in JSON format', // json_encode('key2_value that may contain russian symbols', JSON_UNESCAPED_UNICODE)
'key3'=> array(
'key1'=> array(
key1=> 'string in JSON format'
)
)
)
要素の入れ子は任意で、任意の要素はJSON形式の文字列を含むことができます。
私はこの巨大な配列をPHPのjson_encode($data, JSON_UNESCAPED_UNICODE)
関数を使用してJSONでエンコードします。データにはロシアのシンボルが含まれている可能性があるため、2番目のパラメータを使用します(後でそれらの文字列の一部を検索する必要があります)。その後、私は...データを受信
1ステップ:
デコードJS JSON.parse()関数を使用してJSON文字列を持つすべての配列。
2ステップ:
は、データベースの列にいくつかのJSON文字列を保存した後、JSON.parse()を使用してJSオブジェクトを作成します。
しかし、一部の文字列には、許可されていないJSON文字、特に '\ r'が含まれることがあります。 JSON解析を使用してこの文字列を解析しようとすると、JSON.parseエラーが2番目のステップで表示されます。しかし理論的には、それは第一段階でも起こり得る。
しかし、PHP json_decodeは正常に機能します。 JS JSON.parseが動作しません!
誰もが考えていることはありますか? (私がメイン配列でjson_encodeを使うときには、ロシアのシンボルも含まれているネストされたjson文字列もエスケープされています - スラッシュ、つまり "")。
したがって、 'JSON_UNESCAPED_UNICODE'は使用しないでください。非常に壊れたブラウザを扱っていない限り、完全にエンコードされたデータには 'JSON.parse'には問題がありません。もしあなたがそうしたら、 '~~~ r'のようなプレースホルダを使うことができます。 'json_encode()'を実行する前に '\ r'をプレースホルダに置き換え、JSON.parse()を実行した後にプレースホルダを' \ r'に置き換えます。 「非常に巨大」という意味に応じて、パフォーマンスが低下することはありません。 –
1つの質問: しかし、 '\ r'は許可されていない文字の1つです。私のデータセットは500kBサイズに近いです。また、json文字列のメイン配列内の特別なシンボルが再びエスケープされました。 2質問: 私はphonegapを使用してモバイルアンドロイドアプリケーションを作成します。私はsqliteデータベースを使用します。私がデータを挿入すると、JSON_UNESCAPED_UNICODEを持たないロシアのシンボルが含まれている可能性があります...もし私がデータベースのロシアのシンボルを検索すると、問題はありますか? –
私は本当にあなたのコメントに従わないことを恐れています。私はリテラルの復帰がJSONでは有効ではないことを理解しています。そのため、エンコードする必要があります。なぜそれをエンコーディングするのが問題なのかは分かりません。 JSON.parseは、エンコードされたデータを正しく解釈する必要があります。 –