2012-11-05 243 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”....等}