1

Steam Web API をいじっています。テキストを見つけて別のテキストを抽出する関数を作成しようとしていますが、関数で検索するユーザーに応じて変化します。

IndexOf を使ってみたのですが、抽出したいテキストの長さがバラバラなのでなかなか難しいです。

文字列を抽出する Json 応答は次のようになりますが、検索するユーザーごとに異なります。

{
"response": {
    "game_count": 54,
    "games": [
        {
            "appid": 240,
            "playtime_forever": 51842
        },
        {
            "appid": 260,
            "playtime_forever": 43
        },
        {
            "appid": 300,
            "playtime_forever": 191
        },
        {
            "appid": 320,
            "playtime_forever": 130
        },
        {
            "appid": 340,
            "playtime_forever": 4
        },
        {
            "appid": 520
        },
        {
            "appid": 4000,
            "playtime_2weeks": 798,
            "playtime_forever": 61803
        },
        {
            "appid": 440,
            "playtime_forever": 19466
        },
        {
            "appid": 105600,
            "playtime_forever": 2084
        },
        {
            "appid": 72850,
            "playtime_forever": 2010
        },
        {
            "appid": 380,
            "playtime_forever": 91
        },
        {
            "appid": 400,
            "playtime_forever": 76
        },
        {
            "appid": 420
        },
        {
            "appid": 220,
            "playtime_forever": 827
        },
        {
            "appid": 550,
            "playtime_forever": 906
        },
        {
            "appid": 33910,
            "playtime_forever": 77
        },
        {
            "appid": 33930,
            "playtime_2weeks": 1714,
            "playtime_forever": 31904
        },
        {
            "appid": 219540,
            "playtime_forever": 0
        },
        {
            "appid": 570
        },
        {
            "appid": 205790
        },
        {
            "appid": 22380,
            "playtime_forever": 1119
        },
        {
            "appid": 105400,
            "playtime_forever": 134
        },
        {
            "appid": 204030
        },
        {
            "appid": 12120
        },
        {
            "appid": 12250
        },
        {
            "appid": 24010
        },
        {
            "appid": 8190,
            "playtime_forever": 723
        },
        {
            "appid": 620,
            "playtime_forever": 101
        },
        {
            "appid": 644
        },
        {
            "appid": 730,
            "playtime_forever": 431
        },
        {
            "appid": 10,
            "playtime_forever": 396
        },
        {
            "appid": 80
        },
        {
            "appid": 100
        },
        {
            "appid": 42680,
            "playtime_forever": 65
        },
        {
            "appid": 42690,
            "playtime_forever": 1435
        },
        {
            "appid": 22200
        },
        {
            "appid": 113200,
            "playtime_forever": 270
        },
        {
            "appid": 20540
        },
        {
            "appid": 55110
        },
        {
            "appid": 43110
        },
        {
            "appid": 9340
        },
        {
            "appid": 50620
        },
        {
            "appid": 4560
        },
        {
            "appid": 55230,
            "playtime_forever": 1354
        },
        {
            "appid": 4540
        },
        {
            "appid": 4570
        },
        {
            "appid": 22370,
            "playtime_forever": 305
        },
        {
            "appid": 70,
            "playtime_forever": 479
        },
        {
            "appid": 70300,
            "playtime_forever": 138
        },
        {
            "appid": 220240,
            "playtime_2weeks": 72,
            "playtime_forever": 453
        },
        {
            "appid": 107410,
            "playtime_2weeks": 80,
            "playtime_forever": 403
        },
        {
            "appid": 40800,
            "playtime_2weeks": 124,
            "playtime_forever": 124
        },
        {
            "appid": 12210,
            "playtime_2weeks": 663,
            "playtime_forever": 663
        },
        {
            "appid": 12220,
            "playtime_2weeks": 658,
            "playtime_forever": 658
        }
    ]

}

}

私がやりたいことは、つまり "\"appid\": 440" を検索し、その後に続く playtime_forever int を取得できるようにすることです。どうすればいいのかわからない。文字列の長さが設定されている場合にのみ、Split 関数の助けを借りることができます。これは、必要な配列インデックスを返すことができるためです。

これが不明確になった場合は大変申し訳ありません。達成しようとしていることを説明するために最善を尽くしました。

前もって感謝します、

イサク

4

2 に答える 2

0

Json を動的オブジェクトに逆シリアル化してみることができます。こちらをご覧ください: JSON を C# 動的オブジェクトに逆シリアル化しますか?

次に、アプリのコレクションをループして、appId = 440 を確認します

for(int i = 0; i <= deserializedResult.Count; i++)
{
    if(deserializedResult[i] == 440)
        ....
}

playtime_forever は常に利用できるとは限らないようですので、リフレクションを使用して、アクセスする前に playtime_forever が存在するかどうかを確認する必要があると思います。

于 2013-04-08T12:51:21.957 に答える
0

コメントが言っているように、あなたが見ているのは単純な文字列ではないので、独自のパーサーを作成しようとしないでください。これは、オブジェクトのコレクションを含むJSON応答です。これらのオブジェクトには 3 つのフィールドがあるようです。

  • アプリ ID
  • playtime_forever
  • playtime_2Weeks

これらをコード内でネイティブに操作する場合は、3 つのパブリック プロパティ (getter と setter) を持つトランスポート オブジェクトを作成するだけです。各プロパティは JSON フィールドと同じ名前です。次に、System.WEb.Script名前空間の JavaScriptSerializer を使用して、コレクションをList<TransportObject>.

于 2013-04-08T12:12:35.117 に答える