库从解析的文本文档创建JSON文件

时间:2015-06-11 07:29:27

标签: java json

我从文本文档中解析了一个时间表,并且到达了我必须从原始数据创建JSON文件的步骤,如下面的示例所示。有没有可以帮助我从原始文本文档创建JSON格式文件的库?

我感谢任何帮助。

示例如下:

   {"route": 1
     "info": [
               {"direction": "Surrey Quays"},
               {"stops": [{"stops_name": "Lancaster Place"},
                          {"arrival_time":{
                                       "mon-fri": ["04:41", "05:41", "06:09"],
                                       "sat": [ "05:38", "06:07","06:37"]


                                           }
                           }
                        ]
   }

文本文档中的一些示例

Surrey Quays
1
Lancaster Place

mon-fri 04:41 05:41 06:09 
sat  04:41 05:41 06:09

修改

            for (Entry<String, List<String>> entry : map.entrySet()) {
            String key = entry.getKey();
            List<String> timeEntries = entry.getValue();    
            JSONObject timeTable = new JSONObject();
            timeTable.put("route", route);

            JSONObject info = new JSONObject();
            info.put("direction", direction);

            JSONObject stops = new JSONObject();     
            stops.put("stops_name", key);

            JSONObject arrivals = new JSONObject();
            JSONArray arrivalMoFr  = new JSONArray();

            JSONArray someArray = new JSONArray(timeEntries);
            arrivalMoFr.put( someArray);

            arrivals.put("mon-fri", arrivalMoFr);

            stops.put("arrival_time", arrivals);


            info.put("stops", stops);
            timeTable.put("info", info);

            System.out.println(timeTable.toString(3));


}

**一些结果**

 "arrival_time": {"mon-fri": [[
    "05:04",
    "05:39",
    "19:11",
    "19:41",
    "20:11"
 ]]},

2 个答案:

答案 0 :(得分:0)

您需要先解析文本文件。我很乐意为您的数据创建专用的Java类。确保类反映所需JSON的结构。

有了这些,你可以将Java对象提供给JSON库,JSON库可以免费将其转换为JSON。我正在使用GSON。我相信你会在SO或谷歌上找到更多候选人。

答案 1 :(得分:0)

您可以使用json.org中的JSON library。但它只是所有图书馆的一个例子。

这是你如何使用它: 假设您已经拥有了解析器(意味着您已经拥有了一个可以读取文本文档且知道如何处理数据的方法)

JSONObject timeTable = new JSONObject(); // first create the "main" JSON Object
timeTable.put("route", 1);               // this first entry is just a number
JSONObject info = new JSONObject();      // now you need a second JSON OBject to put all the info in
info.put("direction", "Surrey Quays");   // first info, the direction

JSONObject stops = new JSONObject();     // now you need another Object for all the stops and stop related info
stops.put("stops_name", "Tension Way");  // like the name for the stop

JSONObject arrivals = new JSONObject();  // now all the arrivals
JSONArray arrivalMoFr = new JSONArray(); // this is the first time where an array makes sense here
arrivalMoFr.put("05:38");                // arrival time 1
arrivalMoFr.put("06:07");                // arrival time 2
arrivalMoFr.put("06:37");                //  ...
arrivals.put("mon-fri",arrivalMoFr);     // add the arrival times array as mon-fri to the arraivals object, do the same with all other arrival times (Saturday, Sunday...)
stops.put("arrival_time", arrivals);     // now add the arrival time object to your stops
info.put("stops", stops);                // and put the stops to your info
timeTable.put("info", info);             // once you added all your infos you can put the info into your timeTable

System.out.println(timeTable.toString(3));  // this is just for testing. The number 3 tells you how many whitespaces you want for text-identaion

这是我得到的输出:

{
   "route": 1,
   "info": {
      "stops": {
         "arrival_time": {"mon-fri": [
            "05:38",
            "06:07",
            "06:37"
         ]},
         "stops_name": "Tension Way"
      },
      "direction": "Surrey Quays"
   }
}

我意识到这与你的例子不完全相同。但我认为你明白了。请记住,JSON对象中元素的顺序无关紧要。在阅读JSON时,程序会像json.get("stops_name");一样读取它,并且它不关心停靠点名称是否在到达时间之前或之后。

<强> ADDITION

我看到你将“stops_name”和“arrival_time”-array放在单独的JSON对象中。好吧,如果你想将它们全部放在一个名为“停止”的对象中,这表明你将列出多个停靠点,我建议将它们放在一起。因为JSON对象中的数据没有特定的顺序。

"stops": [
    { 
      "stop_name" : "Lanvester Place",
      "arrival" : {...}
    },{
      "stop_name" : "Some other Place",
      "arrival" : {...}
    }
    ...
]

致编辑:

你正在获得双括号[[,因为你要向arrivals对象添加一个数组,其中第一个条目又是一个数组。

所以不要这样做:

    JSONArray arrivalMoFr  = new JSONArray();

    JSONArray someArray = new JSONArray(timeEntries);
    arrivalMoFr.put( someArray);

    arrivals.put("mon-fri", arrivalMoFr);

你应该这样做:

    JSONArray arrivalMoFr  = new JSONArray(timeEntries);  // put your list of time entries directly into the arrivalMoFr array
    arrivals.put("mon-fri", arrivalMoFr);  // then add the arrivalMoFr array to the arrivals object