Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна библиотека для JSON 
V
    Опции темы
Ch0bits
Дата 7.1.2010, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 2
Всего: 62



Приветствую!
Я не практикую программирование на java и у меня не достаточно опыта чтобы выбрать библиотеку для работы с JSON (http://www.json.org/). Прошу помочь в выборе.
Я пишу программу которая должна читать данные из JSON файла в utf-8 и должна быстро получать значения по ключу. Файл порядка 10000 записей, до 3х уровней вложенности с русскими ключами и значениями. Пример:
Код

[{"pk": 1, 
  "model": "rp.person",
  "fields": 
      {"first_name": "Vova", 
       "last_name": "Petrovich",
       "birthdate": "1999-01-01"}},
 {"pk": 2, 
  "model": "rp.person", 
  "fields":
       {"first_name": "Jora", 
        "last_name": "Kornev", 
        "birthdate": "2222-02-02"}},
 {"pk": 3, 
  "model": "rp.person",
  "fields": 
       {"first_name": "Vova", 
        "last_name": "Petrovich", 
        "birthdate": "1999-01-01"}},
 {"pk": 4, 
  "model": "rp.person", 
  "fields":
       {"first_name": "Jora",
        "last_name": "Kornev",
        "birthdate": "2222-02-02"}}]


Хотелось бы получить от библиотеки такой use-case:
>> json.get("pk").get(0)
1
>> json.get("fields").get(3).get("first_name")
Jora

Пока остановился на json-simple (http://code.google.com/p/json-simple/), но она кажется не работает с юникодом.
Код

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;


public class Report {
    
    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        String path = "s://STAND_ALONE_SOFTWARE//_DEV//workspace//report//src//"; 
        
        InputStream fis = new FileInputStream(path + "json.txt");
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
        BufferedReader br = new BufferedReader(isr);
        String line = "";
        while (br.ready()){
            line += br.readLine();
        }
        
        JSONParser json = new JSONParser();
        JSONArray array=(JSONArray)json.parse(line);
        JSONObject data = (JSONObject)array.get(0);
        
        InputStream inp = new FileInputStream(path + "test.xls");
        Workbook wb = WorkbookFactory.create(inp);
        Sheet sheet = wb.getSheetAt(0);
        
        // Ищем шаблоны в ячейках
        for (int r = sheet.getFirstRowNum(); r < sheet.getLastRowNum(); r++){
         Row current_row = sheet.getRow(r);
         if (current_row == null)
             continue;
         for (int c = current_row.getFirstCellNum(); c < current_row.getLastCellNum(); c++){
             Cell current_cell = current_row.getCell(c);
             // Шаблон может находиться только в строке
             if (current_cell != null && current_cell.getCellType() == Cell.CELL_TYPE_STRING){
                 
                 String text = current_cell.getStringCellValue();
                 int current_pos = 0;
                 // Просматриваем инструкции в строке
                 while (true){
                     int start_instruction = text.indexOf('{', current_pos);
                     if (start_instruction == -1)
                         break;
                     current_pos += start_instruction + 1;
                     int end_instruction = text.indexOf('}', current_pos);
                     if (end_instruction == -1)
                         throw new Exception("Unclosed instruction");
                     current_pos += end_instruction + 1;
                     String instruction = text.substring(start_instruction, end_instruction + 1);
                     String token = text.substring(start_instruction + 1, end_instruction);
                     
                                        ...........................

                 }
                 
                 
             }
         }
        }
........................


Отваливается с юникодом:
Код

Exception in thread "main" Unexpected character () at position 0.
    at org.json.simple.parser.Yylex.yylex(Unknown Source)
    at org.json.simple.parser.JSONParser.nextToken(Unknown Source)
    at org.json.simple.parser.JSONParser.parse(Unknown Source)
    at org.json.simple.parser.JSONParser.parse(Unknown Source)
    at org.json.simple.parser.JSONParser.parse(Unknown Source)
    at Report.main(Report.java:35)

PM WWW   Вверх
Ch0bits
Дата 8.1.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 2
Всего: 62



Походу форум помирает. Раздел по питону так вообще умер.
PM WWW   Вверх
Ch0bits
Дата 8.1.2010, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 2
Всего: 62



Решил проблему.
PM WWW   Вверх
afon
Дата 12.1.2010, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 5.4.2008
Где: Украина, Киев

Репутация: нет
Всего: 1



Я тут новичек, но позволю себе заметить, что раз уж ты решил проблему, пиши - как. 
И сам ответ: библиотека xstream
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.