2

私は現在、WoW 武器庫からあなたのキャラクターのデータを取得するアプリケーションに取り組んでいます。キャラクター例:My WoW Character(リンク)

Blizzard が提供する API を呼び出すことで必要なすべての情報を取得し、JSON. 例JSON:上記の文字に対する JSON 応答 (リンク)

最初はJSON、文字列操作からデータを取得しようとしました。つまり、文字列を分割し、文字列内のキーワードを検索して位置を見つけ、それを才能や統計などの個々のデータにフォーマットします。

これは最初はうまくいきましたが、より多くのデータが必要になるにつれて、すべての文字列で実行した多くの関数のために難しくなりました.

私のを処理する良い方法はありJSONますか? JSONを取得して空のクラスを作成することを考えていました。作業中にJSONプロパティを生成し、そこに値を保存します。しかし、プロパティを動的に生成できるかどうか、またどのように可能かはわかりません。

将来的にはさらに多くのデータを取得したいと考えていますが、それについて考える前に、まずこれを稼働させたいと考えています。

これに関するアイデアやアドバイスはありますか?

前もって感謝します。

4

3 に答える 3

5

あなたの JSON はかなり短く、基本的なようです。特別な速度やエキゾチックな機能は必要ないようです。 http://jsonviewer.stack.hu/#http://eu.battle.net/api/wow/character/moonglade/Xaveak?fields=stats,talents

また、Delphi XE2 以降、DB-Express スイートの一部として JSON パーサーがストックされていますが、まだ懸念事項があり
ます。1. 速度と信頼性の両方で問題が発生すると言われています。
2. プログラムが DB-Express パッケージに依存するようになります (DB アクセスに実際に使用していないのであれば、なぜでしょうか?)

したがって、サードパーティのライブラリを試してみてください。

おそらく最速の 1 つは、 mORMot ライブラリのサイド プロジェクトである Synopse JSON パーサーでしょう。これは一般的に優れたコードであり、速度に細心の注意を払っており、開発者はフォーラムで積極的に支援しています。

もう 1 つのよく知られて使用されているライブラリは、Henri Gourvest の SuperObject です。それは、Delphiの最速のパーサーであると主張しました。上記の理由により、おそらくそれはもはや真実ではありませんが、速度はほとんどのタスクに十分対応しています。Henri 自身は以前のプロジェクトを積極的にサポートしているのではなく、常に何か新しいことを行っているため、公式には不足しているドキュメント(インストール パッケージにも複製されています) しかありません。さらに、他のユーザーが助けてくれるフォーラムもあります。SuperObject 設計の背後にある OTOH の主なアイデアは均一性であり、一部のタスクは実際により適切に文書化できますが、それは主に「このタスクが特別な処理なしで均一な問題で実際に機能するかどうか」という不確実性によるものです。しかし、通常はそうです。
PS。これは wiki なので、将来のユーザーのために拡張してみてください ;-)

ドキュメントに戻ると、必要になるのは

1) JSON 全体をライブラリにロードします。これは、http ライブラリで TStream を作成するか、データを含む文字列バッファを提供することで実行できます。これは、マニュアルの JSON データ構造セクションの解析です。

2) 「名前」や「レベル」などの値の読み取り - 「オブジェクトのプロパティ値を読み取る方法」で説明されています。そこのセクション。

3) 「才能」のような配列を登録します -データ構造の参照セクションで説明されています。

于 2012-12-17T16:47:46.230 に答える
4

XE3 には JSON サポートが「組み込まれています」( docwikiを参照)。したがって、おそらくSuperObjectのようなサードパーティのオプションを探してください。

于 2012-12-17T10:29:18.283 に答える
3

あなたのタスクは、私のdelphi-oopライブラリに含まれている TSvSerializer を使用して簡単に達成できます。モデル タイプを宣言し、json 文字列から逆シリアル化するだけです。モデル (非常に単純化された不完全でテストされていないバージョン) は、次のようになります。

type
  TStats = class
  public
    property health: Integer read fhealth write Fhealth;
    ... 
  end;

  TTalent = class
  public
    property tier: Integer read Ftier write Ftier;
    ...
  end;

  TMainTalent = class
  public
    property selected: Boolean read Fselected write Fselected;
    property talents: TObjectList<TTalent> read Ftalents write Ftalents;
  end;

  TWowCharacter = class
  public
    property lastModified: Int64 read FlastModified write FlastModified;
    property name: string read Fname write Fname;
    ...
    property stats: TStats read Fstats write Fstats;
    property talents: TObjectList<TMainTalent> read Ftalents write Ftalents;
    ...
  end;

次に、次のことを行う必要があります。

uses
  SvSerializer;

var
  LWowCharacter: TWowCharacter;
begin
  LWowCharacter := TWowCharacter.FromJson(YourJsonString);
...

Delphi-oop プロジェクトで私の連絡先メールを見つけることができます。不明な点があれば質問してください。空いた時間にお手伝いします。

于 2012-12-17T12:39:48.340 に答える