当前位置: 首页 > 知识库问答 >
问题:

在Java中解析Json对象

赵景曜
2023-03-14

我是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
}

如果有帮助的话,是Redmine API为时间条目提供的输出。我正在努力理解一些基本的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和名称字符串,尽管它被多次使用?

我知道我不应该在小时数中使用字符串,我正在研究小时数字段实际包含的内容。我认为教程有点过时,因为最后三个字段在Twitter API中的表示方式与现在不同。

共有2个答案

黄昊
2023-03-14

数据位于名称/值对中数据由逗号分隔花括号保留对象方括号保留数组

我在这里使用了javascript...它可能对你有用...如果你有任何其他帮助让我知道

var jsonText=xmlhttp.responseText; var obj=ava("("jsonText ")");

row_num=Object.keys(obj.time_entries)。长度;这一行给出time_entries数组长度的长度

keydata[c]=Object.keys(obj.time_条目[0]);columndata=keydata[0]。toString();my=columndata.split(“,”)

columndata将时间项的键值作为该数组中第零个索引的字符串包含columndata={hours,id,create_on….等等}my={“hours”,“id…”等等}

轩辕瑞
2023-03-14

我不知道你说的多个ID字段是什么意思。JSON中没有ID这种东西。

关于基本的JSON概念,请参见http://json.org/:

对象:

对象是一组无序的名称/值对。对象以{(左大括号)开始,以}(右大括号)结束。每个名称后面跟有:(冒号),名称/值对之间用(逗号)分隔。

数组:

数组是值的有序集合。数组以[(左括号)开始,以](右括号)结束。值之间用(逗号)分隔。

价值:

值可以是双引号中的字符串、数字、true或false或null、对象或数组。这些结构可以嵌套。

字符串:

字符串是零个或多个Unicode字符的序列,用双引号括起来,使用反斜杠转义。字符表示为单个字符串。字符串非常类似于C或Java字符串。

号码:

数字与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
}

也许您可以看到您有一个JSON对象,它有四个名称/值对:

  • time_entries
  • 偏移量
  • 限制
  • total_count

最后三个有简单的数值,而第一个(time_entries)是两个以上对象的数组。这两个对象中的每一个都包含了不同的名称/值对。名称/值对id只是其中之一。

 类似资料:
  • 问题内容: 我有JSON对象,如下所示: 我想在android中解析数据并将其存储到数据库中,但是我在Jsonobject中感到困惑,谢谢 问题答案: 以下是用于解析json字符串的代码段代码。请经历一下:

  • 问题内容: 我有JSON对象,如下所示: 在Java中,我想解析上述json对象并将值存储在arraylist中。 我正在寻找一些代码来实现这一目标。 问题答案: 我假设你想将interestKeys存储在列表中。 使用库:

  • 问题内容: 我熟悉如何使用注释从我的方法返回json 。 现在,我试图将一些json参数读入我的控制器,但到目前为止还没有运气。这是我的控制器的签名: 但是当我尝试调用此方法时,spring抱怨: 删除注释似乎没有什么不同。 手动解析json是可行的,因此Jackson必须在类路径中: 有任何想法吗?我是否在尝试做不被支持的事情? 问题答案: 您的参数要么是一个, 或者 一个,不能同时使用。 用于

  • 你好,我有以下任务: 具有JSON对象的URL: *通过注释定义如何将JSON定义到Java列表中,并找到其中有“名称”的对象。 我认为问题是在不使用任何java库的情况下解析JSON。到目前为止,我已经开发了以下代码: 我在这里做的是我有一个JSONObject类,它将JSON属性存储在映射中,然后我想使用反射来填充任何类。 为了解析JSON,我尝试创建一个迷你FSM(:)),它使用For循环解

  • } 我在公共类中的主要方法是这样的: 以下是包裹的代码: } 但是我似乎没有找到正确的方法来将变量的所有值存储在列表中。现在我得到的只是parcel[data=null]。

  • 因此,我试图使用GSON解析Java中的JSON对象。我正在尝试从一个网站消费一个API。这是代码:https://api.coinmarketcap.com/v1/ticker/bitcoin/ JSON如下所示: 我正在使用Jersey来消费API,我想把这个JSON转换成一个对象。 这是应该通过解析JSON来构建的对象: 这是我的代码: 我有个错误 线程“main”com.google.gs