2

私はJSONを初めて使用し、JavaでGSONを使用してこのレイアウトを解析するのに本当に苦労しています

{"time_entries":
[
    {"hours":1.0,
    "id":311,
    "created_on":"2012-11-02T14:53:38Z",
    "user":{"id":7,"name":"blah"},
    "issue":{"id":266},
    "activity":{"id":10,"name":"blah"},
    "updated_on":"2012-11-02T14:53:38Z",
    "comments":"blah",
    "spent_on":"2012-11-02",
    "project":{"id":10,"name":"blah"}},

    {"hours":6.0,
    "id":310,
    "created_on":"2012-11-02T13:49:24Z",
    "user":{"id":4,"name":"blah"},
    "issue":{"id":258},
    "activity":{"id":9,"name":"blah"},
    "updated_on":"2012-11-02T13:49:24Z",
    "comments":"blah",
    "spent_on":"2012-11-02",
    "project":{"id":11,"name":"blah"
    }}
],
"offset":0,
"limit":2,
    "total_count":306
}

それが役立つ場合は、RedmineAPIが時間エントリに対して提供する出力です。 オブジェクトや配列などの基本的なJSONの概念のいくつかを理解するのに苦労しており、これに似たレイアウトの例を見つけることができませんでした。

私が読んだチュートリアルを使用する際の私の主な懸念は、複数のIDフィールドが混乱することです。

結び目を作らずにこれを解析するための最良の方法は何ですか?

私はGsonを使用するつもりはなく、Jacksonまたは組み込みライブラリを使用したソリューションがあれば幸いです。最終的な目標はAndroidの実装であるため、シリアル化を使用することをお勧めします。

ありがとう

編集:

「オブジェクトモデル」での私の試み

public class TimeResponse {
     public List<Time_Entry> time_entries;

        @SerializedName("hours")
        public String hours;

        @SerializedName("id")
        public int id;

        @SerializedName("created_on")
        public String created_on;

        @SerializedName("name")
        public String name;

        @SerializedName("updated_on")
        public int updated_on;

        public int page;

        @SerializedName("comments")
        public double comments;

        @SerializedName("spent_on")
        public String spent_on;

        @SerializedName("offset")
        public String offset;

        @SerializedName("limit")
        public String limit;

        @SerializedName("total_count")
        public String total_count;

}

結果リストに何を書くべきかわからず(必要な場合)、IDと名前の文字列を複数回使用されているにもかかわらず宣言したのは1回だけですか?

時間フィールドに実際に何が含まれているかを調べている最中の時間に文字列を使用するべきではないことを認識しています。最後の3つのフィールドが現在TwitterAPIで同じように表されていないという点で、チュートリアルは少し古くなっていると思います。

4

2 に答える 2

3

「複数のIDフィールド」の意味がわかりません。JSONにはIDのようなものはありません。

基本的なJSONの概念については、 http ://json.org/を参照してください。

物体:

オブジェクトは、名前と値のペアの順序付けられていないセットです。オブジェクトは{(左中括弧)で始まり、}(右中括弧)で終わります。各名前の後には:(コロン)が続き、名前と値のペアは、(コンマ)で区切られます。

配列:

配列は、順序付けられた値のコレクションです。配列は[(左角かっこ)で始まり、](右角かっこ)で終わります。値は、(コンマ)で区切られます。

価値:

値は、二重引用符で囲まれた文字列、数値、trueまたはfalseまたはnull、またはオブジェクトまたは配列にすることができます。これらの構造はネストできます。

弦:

文字列は、バックスラッシュエスケープを使用して、二重引用符で囲まれた0個以上のUnicode文字のシーケンスです。文字は単一の文字列として表されます。文字列は、CまたはJavaの文字列に非常によく似ています。

番号:

数値は、8進数と16進数の形式が使用されないことを除いて、CまたはJavaの数値と非常によく似ています。

編集:

質問からJSONを単純化するためにできることは、きれいに印刷する以外にあまりありません。

{
    "time_entries": [
        {
            "hours": 1,
            "id": 311,
            "created_on": "2012-11-02T14:53:38Z",
            "user": {
                "id": 7,
                "name": "blah"
            },
            "issue": {
                "id": 266
            },
            "activity": {
                "id": 10,
                "name": "blah"
            },
            "updated_on": "2012-11-02T14:53:38Z",
            "comments": "blah",
            "spent_on": "2012-11-02",
            "project": {
                "id": 10,
                "name": "blah"
            }
        },
        {
            "hours": 6,
            "id": 310,
            "created_on": "2012-11-02T13:49:24Z",
            "user": {
                "id": 4,
                "name": "blah"
            },
            "issue": {
                "id": 258
            },
            "activity": {
                "id": 9,
                "name": "blah"
            },
            "updated_on": "2012-11-02T13:49:24Z",
            "comments": "blah",
            "spent_on": "2012-11-02",
            "project": {
                "id": 11,
                "name": "blah"
            }
        }
    ],
    "offset": 0,
    "limit": 2,
    "total_count": 306
}

おそらく、4つの名前/値ペアを持つ1つのJSONオブジェクトがあることがわかります。

  • time_entries
  • offset
  • limit
  • total_count

これらの最後の3つは単純な数値ですが、最初の(time_entries)はさらに2つのオブジェクトの配列です。これら2つのオブジェクトはそれぞれ、さまざまな名前/値のペアで構成されています。名前と値のペアは、これらの1つにすぎません。id

于 2012-11-05T13:59:51.250 に答える
1

データは名前と値のペアになりますデータはコンマで区切られます中かっこはオブジェクトを保持します角かっこは配列を保持します

私はここでjavascriptを使用しました..それはあなたに役立つかもしれません..他に何か助けがあれば私に知らせてください

var jsonText = xmlhttp.responseText; var obj = eval ("(" + jsonText + ")");

row_num=Object.keys(obj.time_entries).length; この行は、time_entries配列の長さを示します

keydata[c]=Object.keys(obj.time_entries[0]); columndata=keydata[0].toString(); my = columndata.split(",");

columndataには、その配列の0番目のインデックスの文字列として時間エントリのキー値が含まれますcolumnndata = {hours、id、create_on.....など}my = {"hours"、 "id" .... etc }

于 2013-03-06T12:16:06.667 に答える