Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2011, 11:22   #1
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию Json парсер

Привет всем!

Написал парсер json. Необходимо потестить.

Что парсер умеет делать в теории:
1) Сохранять примитивы в соответствующие объекты в яваскрипте.
2) Сохранять итераторы, коллекции в списки яваскрипта.
3) Сохранять хэши, а также все остальные классы (не являющиеся числовыми, символьными, строковыми, итерируемыми) в хэши яваскрипта.
4) Загружать логические значения яваскрипта в логические значения, строки (true/false), числа (ноль/неноль)
5) Загружать числа яваскрипта в логические значения (ноль/неноль), числа, символ (код), строки
6) Загружать строки яваскрипта в логические значения (true/false), числа, символ (односимвольная строка), строку
7) Загружать списки яваскрипта в массивы, коллекции (при соответствии типов элементов)
8) Загружать хэши яваскрипта в хэши (при соответствии типов элементов), другие классы (ключи должны быть строками и соответствовать полям класса, при этом в лишние поля ставятся значения по умолчанию, поля могут отсутствовать, типы же остальных полей должны соответствовать), при этом допускается использование внутренних классов, нестатических, класс должен иметь конструктор по умолчанию.
9) Загружать все объекты яваскрипта в Object

ЗЫ Методы для сохранения в json и загрузки из него соответственно save и load.
ЗЫЫ Нужно убрать расширение .txt
Вложения
Тип файла: txt Json.java.txt (32.2 Кб, 173 просмотров)

Последний раз редактировалось Carbon; 02.06.2011 в 11:50.
Carbon вне форума Ответить с цитированием
Старый 02.06.2011, 17:30   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

А чем библиотека Gson не угодила?
profi вне форума Ответить с цитированием
Старый 02.06.2011, 22:36   #3
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от profi Посмотреть сообщение
А чем библиотека Gson не угодила?
Я её на работе юзаю. Много чем.
1) Работать с внутренними классами вообще не умеет (выводит как пустой хэш, при вводе насколько помню не заполняет поля)
2) То же и с нестатическими вложенными классами (правда вылетает эксепшн из-за наличия указателя на обрамляющий класс)
3) Если есть базовый класс A и производный B и есть список List<A>, заполненный объектами B, то парсер выводит элементы так, будто они созданы классом A, хотя если список такой List<Object>, то работает всё норм.
4) Невозможно нормально парсить списки с учётом разнородности элементов (что часто требуется):

Код:
public static class A
{
	public Object [] array;
}

new Gson().fromJson("{ 'array' : [1, 2, '3'] }", A.class); // тут без проблем
new Gson().fromJson("{ 'array' : [1, 2, [3]] }", A.class); // а тут километровый эксепшн
Да и вообще, он не умеет в Object запихивать массивы.

Это те глюки, что я заметил, может и другие есть. Но реально вымораживает на такое натыкаться: упал сервер и сижу ищу, где у меня баг, а оказывается это либа решила сумничать и не собрала/распарсила сообщение (и это хорошо, если она эксепшн кинула).

Хотя... я на версию 1.6 ориентируюсь, перепроверю эти 4 случая, может и пофиксили. Но всё-таки, потестите мою либу. ок?
Carbon вне форума Ответить с цитированием
Старый 02.06.2011, 22:59   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Итак, как и обещал, потестил на эти 4 случая 1.7.1 версию билда.

1. остался
Код:
class A
{
	public int x;
}
		
System.out.println(new Gson().toJson(new A()));
Что внутри статического, что внутри обычного метода - ничего не выводит (и да, походу я ошибся в прошлом сообщении: тогда также ничего на вывод не шло).

Если преобразовывать в объект:
Код:
class A
{
	public int x;
}
		
A obj = new Gson().fromJson("{ 'x' : 111 }", A.class);
System.out.println(obj.x); // выводит 0
что в статическом, что в обычном методе.


2. пофикшен
3. пофикшен
4. остался
Carbon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
php и json Abuhamed PHP 12 28.11.2010 17:41
Разбор JSON данных AndreyK Общие вопросы Delphi 0 29.10.2010 22:55
JSON, Deplhi Varossa Работа с сетью в Delphi 0 10.09.2010 15:14
Работа с JSON Wayfer Работа с сетью в Delphi 3 09.07.2010 19:32
JSON и C++Builder s2dent Общие вопросы C/C++ 0 15.06.2010 14:46