2012-11-05 185 views
2

我是新來的JSON,我真的很掙扎在Java中解析JSON對象Java中

{"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 
} 

如果它可以幫助它的輸出the Redmine API gives you for time entries. 我掙扎瞭解一些與GSON解析此佈局像對象和數組這樣的基本JSON概念,我還沒有找到一個類似於這個佈局的例子。

我使用我讀過的教程的主要關注點是多個ID字段會混淆。

什麼是最好的方式來解析這個沒有把自己綁在結?

我沒有設置使用Gson,並會很高興爲使用傑克遜或內置庫的解決方案。最終目標是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和名稱字符串,儘管它被多次使用?

我知道我不應該爲我的時間使用字符串我正在查看什麼是小時字段實際包含的過程。我相信這個教程稍微過時了,因爲最近的三個字段現在在Twitter API中沒有以相同的方式表示。

+0

http://json.org/是開始的地方。 – Prasanth

回答

3

我不確定'多個ID字段'是什麼意思。在JSON中沒有這樣的東西。

關於基本JSON概念,請參見http://json.org/

對象:

一個目的是無序集合的名稱/值對。一個對象以{(左大括號)開始並以}(右大括號)結束。每個名稱後跟:(冒號),名稱/值對由(逗號)分隔。

陣列:

數組是值的有序集合。數組以[(左括號)開始,以[]結尾(右括號)。值由(逗號)分隔。

值:

值可以是在雙引號的字符串或數字,或真或假或爲空,或物體或陣列。這些結構可以嵌套。

字符串:

字符串是零個或多個Unicode字符序列,包在雙引號,使用反斜槓逃逸。一個字符被表示爲一個字符串。一個字符串非常像C或Java字符串。

數:

甲數量是非常像C或Java數,不同的是八進制和十六進制格式不被使用。

編輯:

沒有太多可以做,以從你的問題simlify的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 
} 

或許你可以看到你有一個JSON 對象帶有四個名稱/值對:

  • time_entries
  • offset
  • limit
  • total_count

最後三個的這些具有簡單的數值,而第一(time_entries)是兩個對象陣列。這兩個對象中的每一個都包含各種名稱/值對。名稱/值對id只是其中之一。

+0

對不起,我的含糊不清。我特意指出問題,活動和用戶在上面的JSON示例中具有的id字段。 – ThrowingSpoon

+0

請參閱我的編輯瞭解如何理解您的JSON的一些提示。 – 2012-11-05 14:07:12

+0

謝謝你解釋。我想我現在可以用一個例子來理解我的所作所爲。 – ThrowingSpoon

1

數據是名稱/值對 數據由逗號分隔 大括號持有的對象 方括號持有數組

我在這裏已經使用的JavaScript ..它可能對您有用..如果你已經任其他的幫助讓我KNW

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包含時間條目的鍵值的零個索引該數組中的字符串 columnndata = {小時,ID,create_on .....等} 我= {「小時」 ,「id」....等}