これは、さまざまなマッピングコレクション間での微妙な違いの1つです。JSONはキーを文字列として扱います。Pythonは、タイプのみが異なる個別のキーをサポートしています。
Python(および明らかにLua)では、マッピング(それぞれ辞書またはテーブル)のキーはオブジェクト参照です。Pythonでは、これらは不変の型であるか、または__hash__
メソッド。(Luaのドキュメントでは、可変オブジェクトの場合でもハッシュ/キーとしてオブジェクトのIDを自動的に使用し、同等の文字列が確実に同じオブジェクトにマッピングされるように文字列インターンに依存することを推奨しています)。
Perl、Javascript、awk、およびその他の多くの言語では、ハッシュ、連想配列、または指定された言語で呼び出されるもののキーは、文字列(またはPerlでは「スカラー」)です。perlに$foo{1}, $foo{1.0}, and $foo{"1"}
はすべて同じマッピングへの参照があります%foo
---キーが評価されますスカラーとしてれます!
JSONはJavascriptシリアライゼーションテクノロジーとして始まりました。(JSONの略J AVA S CRIPT O bject N otation。)当然のことながら、そのマッピングの意味と一致するそのマッピング表記のためのセマンティクスを実装します。
シリアライゼーションの両端がPythonになる場合は、ピクルスを使用したほうがよいでしょう。これらをJSONからネイティブPythonオブジェクトに変換する必要がある場合は、いくつかの選択肢があると思います。まず、(try: ... except: ...
)を試して、辞書の検索に失敗した場合に任意のキーを数値に変換できます。または、もう一方の端(このJSONデータのシリアライザーまたはジェネレーター)にコードを追加すると、各キー値に対してJSONシリアル化を実行させることができます-それらをキーのリストとして提供します。(その後、Pythonコードは最初にキーのリストを反復処理し、それらをネイティブのPythonオブジェクトにインスタンス化/逆シリアル化します...次に、それらを使用してマッピングから値にアクセスします)。