【问题标题】:How should the Json be for getting following dataJson应该如何获取以下数据
【发布时间】:2017-03-09 09:16:31
【问题描述】:

我有一组日期。在每个日期都有一组名称,包括进入时间、退出时间。 Json格式应该如何在android的listview中显示。

2016 年 11 月 7 日

杰克 11.20am 10.20pm

约翰 12.33am 11.32pm


2016 年 12 月 7 日

皮特 10.20pm 10.00am

等等……

我试图在列表视图中显示这样的内容。因此,Json 格式应该如何以及我如何访问 Json 项目。

            items.add(new Header(j, "Friday - November 30th 2012"));
            items.add(new EventItem(j, "8:30am" , "Start work"));

            items.add(new EventItem(j, "9:15am" , "Call Bob"));
            items.add(new EventItem(j, "11:00am", "Meeting with Joe"));
            items.add(new EventItem(j, "5:00pm" , "Freedom!"));

            items.add(new Header(j, "Saturday - December 1st 2012"));
            items.add(new EventItem(j, "8:30am" , "Keep sleeping"));
            items.add(new EventItem(j, "10:00am", "Wake up"));
            items.add(new EventItem(j, "11:00am", "Walk the dog"));
            items.add(new EventItem(j, "6:00pm" , "Dinner at John's"));

            items.add(new Header(j, "Sunday - December 2rd 2012"));
            items.add(new EventItem(j, "8:30am" , "Keep sleeping"));
            items.add(new EventItem(j, "10:00am", "Wake up"));
            items.add(new EventItem(j, "11:00am", "Walk the dog"));
            items.add(new EventItem(j, "6:00pm" , "Dinner at John's"));

            items.add(new Header(j, "Monday - December 3rd 2012"));
            items.add(new EventItem(j, "8:30am" , "Start work"));
            items.add(new EventItem(j, "9:15am" , "Call Bob"));
            items.add(new EventItem(j, "11:00am", "Meeting with Joe"));
            items.add(new EventItem(j, "5:00pm" , "Freedom!"));

这就是我在没有 Web 服务的情况下直接将日期和详细信息添加到 Java 列表中的方法。 我正在打印一个月的出勤率。在每个日期,我需要打印员工姓名,进入时间,退出时间

【问题讨论】:

  • 加个json代码和一些你试过的jave代码会更好
  • jsoneditoronline.org之类的工具可以帮助你构建json字符串,这可能会有所帮助。
  • 没关系。您应该使用 JSON 对象映射器(例如,Jackson)来构造建模的数据传输对象。从那里,您可以创建一个ArrayAdapter<YourModeledData>。您可以按照此操作指南,将“用户”替换为您将使用的任何数据结构,该数据结构是从 JSON 创建的。 github.com/codepath/android_guides/wiki/…
  • 添加了 java 代码。我需要给出 Json 代码的想法,以便 php 开发人员可以开发它。我现在没有 json。

标签: java android arrays json


【解决方案1】:

我可能会迟到回答,因为我必须从头开始为您编写代码哈哈。好吧检查一次,它可能会帮助您了解如何访问 JSON。

你的 JSON 应该是这样的:

{
       "items":    [
                  {
                      "name":"Jack",
                      "entryTime":"11.20am",
                      "exitTime":"10.20pm",
                       "date":"11/06/2016"

                  },
                  {
                      "name":"John",
                      "entryTime":"12.33am",
                      "exitTime":"11.32pm",
                     "date":"15/06/2015"
                  },
                  {
                      "name":"Pete",
                      "entryTime":"05.33am",
                      "exitTime":"04.32pm",
                        "date":"09/08/2016"
                  }
               ]

        }

然后要访问它们,您需要一个模型类 (POJO),它将保存您想要从 JSON 访问并显示在 listView 中的数据。

类似这样的:

 public class Employee{

private String employeeName;
private String entryTime;
private String exitTime;
private String date;

public String getEmployeeName(){
        return employeeName;
        }

public void setEmployeeName(String employeeName){
        this.employeeName=employeeName;
        }
public String getEntryTime(){
        return entryTime;
        }

public void setEntryTime(String entryTime){
        this.entryTime=entryTime;
        }
public String getExitTime(){
        return exitTime;
        }

public void setExitTime(String exitTime){
        this.exitTime=exitTime;
        }

public String getDate(){
        return date;
        }

public void setDate(String date){
        this.date=date;}
        }

现在要访问它们,好吧,如果您使用的是异步任务,那么您可以在 String 中返回响应。如果您想要静态 JSON,则只需将上述 JSON 分配给 String 变量。例如:

 String jsonString="{\n" +
           "       \"items\":    [\n" +
           "                  {\n" +
           "                      \"name\":\"Jack\",\n" +
           "                      \"entryTime\":\"11.20am\",\n" +
           "                      \"exitTime\":\"10.20pm\",\n" +
           "                       \"date\":\"11/06/2016\"\n" +
           "\n" +
           "                  },\n" +
           "                  {\n" +
           "                      \"name\":\"John\",\n" +
           "                      \"entryTime\":\"12.33am\",\n" +
           "                      \"exitTime\":\"11.32pm\",\n" +
           "                     \"date\":\"15/06/2015\"\n" +
           "                  },\n" +
           "                  {\n" +
           "                      \"name\":\"Pete\",\n" +
           "                      \"entryTime\":\"05.33am\",\n" +
           "                      \"exitTime\":\"04.32pm\",\n" +
           "                        \"date\":\"09/08/2016\"\n" +
           "                  }\n" +
           "               ]\n" +
           "\n" +
           "        }";

然后可以像这样访问 JSON:

  private ArrayList<Employee> employeeDetails=new ArrayList();/*ArrayList that holds the list data that are to be populated in a listview.*/

        try{
        JSONObject jObj=new JSONObject(jsonString);
        JSONArray jArrray=jObj.getJSONArray("items");
        for(int i=0;i<jArray.length();i++){
        Employee mEmployee=new Employee();
        JSONObject empDetails=jArray.getJSONObject(i);
        String empName=empDetails.getString("name");
        String entryTime=empDetails.getString("entryTime");
        String exitTime=empDetails.getString("exitTime);
String date=empDetails.getString("date");

        mEmployee.setEmployeeName(empName);
        mEmployee.setEntryTime(entryTime);
        mEmployee.setExitTime(exitTime);
        mEmployee.setDate(date);
        employeeDetails.add(mEmployee);/*add data to arraylist*/

        }
    }catch(JSONException e){
    e.printStacktrace();
    }

然后您可以简单地将 arraylist 传递给 listAdapter 并填充视图。

【讨论】:

  • 喜欢 2017 年 11 月 6 日?和员工详细信息是否按日期分开?
  • 是的,兄弟。在每个日期,我都需要显示员工详细信息。
  • 请支持我的回答:)。如果您愿意,可以将其标记为正确。
【解决方案2】:

我认为 JSON 会是这样的:

{
   [
      {
          "name":"john",
          "in":1489051528,
          "out":1489053000
      },
      {
          "name":"foo",
          "in":1489051528,
          "out":1489053000
      },
      {
          "name":"bar",
          "in":1489051528,
          "out":1489053000
      }
   ]
}

【讨论】:

  • 我需要添加日期。我正在打印一个月的出勤率。在每个日期,我需要打印员工姓名,进入时间,退出时间
【解决方案3】:

如果您不想对 json 数据集进行复杂查询(除了在 ListView 中显示它),那么您可以使用以下内容:

{
   "1478457000000": // 11/07/2016
   [
      {
          "name":"jack",
          "in":1478497800000, // 11:20am
          "out":1478537400000 // 10:20pm
      },
      {
          "name":"john",
          "in":1489051528,
          "out":1489053000
      }
   ],

   "1481049000000": // 12/07/2016
   [
      {
          "name":"pete",
          "in":1481129400000, // 10:20pm
          "out":1481085000000// 10:00am
      }
   ]
}

【讨论】:

  • 哇,谢谢。这就是我一直在寻找的。你能帮我从这个 json 获取数据吗?如何提取日期及其对应的数据。
【解决方案4】:

您回答了自己的问题:

我有一组日期

好的,所以日期是根元素。

每个日期都有一组名字

每个日期条目都有一个名称子字典。

有进入时间,退出时间

每个名称对应一个进入和退出时间。所以名称将映射到一个对象。

最后,你会得到类似的东西:

{
  "dates": {
    "11/07/2016": {
      "jack": {
        "username": "jack",
        "entry": "11:20am",
        "exit": "10:20pm"
      },
      "john": {
        "username": "john",
        "entry": "12.33am",
        "exit": "11:32pm"
      }
    },
    "12/07/2016": {
      "pete": {
        "username": "pete",
        "entry": "10:20pm",
        "exit": "10:00am"
      }
    }
  }
}

改进

  • 如果entryexit 是时间戳而不只是时间,例如"entry":"2016-07-11T23:32:00",会更好

  • JSON 字典不能有重复的键。因此,您可以使用唯一的用户名而不是名字作为键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多