完全な答えを掲示し、場合に他の人があなたの最初の例では
を不思議に思っているのために、あなたは「解像度」は、2つのプロパティが含まれていることをコンパイラに指示しました - 1と呼ばれる「メソッド」(これははString)、もう1つは "data"(配列)です。今使用しているJSONには実際にはArray<Dynamic>
がありません。動的オブジェクトを持っています。配列は、"data":[0,1]
のようになります。
だから、あなたはダイナミックオブジェクトとしてdata
を持っているJSONのためのものと仮定すると、ここに(あなたがコメントで述べたように)反映使ってどのようにそれ以上のあなたのループ、次のとおりです。
var data:String='{"data":{"0":0,"1":1},"method":"test"}';
var res = haxe.Json.parse(data);
for (n in Reflect.fields(res.data))
trace(Reflect.field(res.data, n));
注ここでドン私たちはリフレクションを使用しているので、それはダイナミックとして残すので、resのタイプを指定する必要はありません。今
、あなたのJSONが実際に配列が含まれている場合、コードは次のようになります。
あなたが実際にres.dataが配列でコンパイラ(そして今回、それを伝えるために、明示的なタイピングを使用ここで
var data:String='{"data":[0,1],"method":"test"}';
var res:{method:String,data:Array<Int>} = haxe.Json.parse(data);
for (n in res.data)
trace(n);
をis)、それは通常それをループすることができます。
コンパイル時にエラーが発生しなかったのは、コンパイラが本当にそこに配列されていると思ったからです。コードの両方のスタイルの実行時には、それが例外をスローするか否か、おそらくターゲットに依存します...しかし、あなたはおそらく、とにかくその外に滞在したい:)
デモ:http://try.haxe.org/#772A2
解決される問題。 'for(Reflect.fields(data)のn)' –
これはあなたにフィールド名のリストを与えるだけです。また、Reflect.field(data、n)を実行する必要があります。 –
@IgorBloom:あなたはこの質問を忘れてしまったと思います。礼儀のために、答えを受け入れるか、何が間違っているかをコメントに残すのではなく、返事を残しておくのが良いでしょう。ありがとう。 – dagnelies