Json应该如何获取以下数据

时间:2017-03-09 09:16:32

标签: java android arrays json

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

  

2016年11月7日

     杰克上午11点20分晚上10点20分

     

John 12.33am 11.32pm

  

2016年12月7日

     

Pete 10.20pm 10.00am

依旧......

我想在listview中显示这样的内容。那么为什么应该是Json格式以及如何访问Json项目。

    let currentDate = Date()

    let CurrentTimeZone: TimeZone = TimeZone(abbreviation: "UTC")!
    let SystemTimeZone: TimeZone = TimeZone.current

    let currentGMTOffset: Int = CurrentTimeZone.secondsFromGMT(for: currentDate)
    let SystemGMTOffset: Int = SystemTimeZone.secondsFromGMT(for: currentDate)

    let interval: TimeInterval = Double(SystemGMTOffset) - Double(currentGMTOffset)

    let todayDate: Date = Date(timeInterval: interval, since: currentDate)

    print("  Today Date : \(todayDate)")

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

4 个答案:

答案 0 :(得分:0)

我认为JSON会是这样的:

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

答案 1 :(得分:0)

如果您不想对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
      }
   ]
}

答案 2 :(得分:0)

你回答了自己的问题:

  

我有一组日期

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

  

在每个日期都有一组名称

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

  

有进入时间,退出时间

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

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

GitHub

<强> IMPROVEMENTS

  • 如果{ "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" } } } } entry是时间戳而不仅仅是exit

  • ,那会更好
  • JSON字典不能包含重复的键。因此,您可以使用唯一的用户名作为密钥而不是名字。

答案 3 :(得分:0)

我可能会迟到回答,因为我必须从头开始为你编写代码哈哈..好好检查一下,它可能会帮助你如何访问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"
                  }
               ]

        }

然后要访问它们,您需要一个Model类(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并填充视图。