2015-06-11 4 views
0

Я проанализировал расписание из текстового документа и достиг уровня, на котором я должен создать файл 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 

Edit:

  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" 
]]}, 
+0

ли текстовые данные уже разобраны? –

+0

@StefanoSanfilippo: да, как в тексте документа просто. Я исправил его из pdf-документа? – TheLight

+0

Я имею в виду, у вас уже есть «Список », содержащий запись для каждого объекта? Или вы все еще можете извлечь его из текста? –

ответ

0

Вы можете использовать этот JSON library с json.org. Но это всего лишь один пример всех библиотек.

Это, как вы могли бы использовать его: Допустим, у вас уже есть парсер (то есть у вас уже есть метод, который может прочитать текстовый документ и который знает, что делать с данными)

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");, и все равно, будет ли имя остановки до или после времени прибытия.

Сложение

Я видел, что ты поставил "stops_name" и "arrival_time" -array в отдельных JSON объектов. Ну, если вы хотите поместить их все в объект под названием «стопы», который предполагает, что вы перечислите более одной остановки, я предлагаю собрать их вместе. Поскольку данные в объекте JSON не имеют определенного порядка.

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

К вашему EDIT:

ваши получают двойные фигурные скобки [[, потому что вы добавляете массив в ваш 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 
+0

У меня есть время 'timeEntries' как список это poosibale, чтобы добавить его в' JSONArray' в этой форме, так как я получаю для '' arrivalMoFr.put ("mon-fri", timeEntries) ; 'следующий' Метод put (int, boolean) в типе JSONArray не применим для аргументов (String, List ) ' – TheLight

+0

Вы можете добавить полный список (ArrayList или любой другой вид Collection) в JSONArray, например this: 'JSONArray someArray = new JSONArray (list);'. Если у вас уже есть JSONArray, и вы просто хотите добавить еще несколько записей, вам нужно указать индекс, куда добавить дополнительные записи: 'someArray.put (3, list);'. Это должно добавить полный список в массив, начиная с индекса 3 – GameDroids

+0

. Пожалуйста, вы можете взглянуть на мой код редактирования? У меня проблема с fycing, так как я получаю скобки '[[' при запуске и конце JSOnArray. – TheLight

0

Сначала необходимо разобрать текстовый файл. Я стараюсь создавать выделенные классы Java для ваших данных. Убедитесь, что классы отражают структуру желаемого JSON.

Как только у вас есть это, вы можете передать вам Java-объект в библиотеку JSON, которая бесплатно превратит его в JSON. Я использую для этого GSON. Я уверен, что вы найдете еще несколько кандидатов на SO или Google.

Смежные вопросы