Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / JSON из JS, где имена не заключены в двойные кавычки / 25 сообщений из 26, страница 1 из 2
16.07.2018, 12:56
    #39674454
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
Выдрал JSON-текст из JavaScript, а там имена параметров не заключены в двойные кавычки :(

Код: pascal
1.
2.
3.
4.
5.
6.
Var
  jO: TJSONObject;
begin
  try
    jO := TJSONObject.ParseJSONValue(sRegions) as TJSONObject;// парсим
...



в итоге jO равен NIL`у.
Тестировал json-текст на разных онлайн сервисах и ошибок нет.
Но парсер Delphi отказывается его парсить и ошибок не выдаёт.
Ошибки показывает только firefox, и я так понял, что проблема в том, что имена параметров не заключены в двойные кавычки.
Мне сказали, что для JS это нормально, т.к. в JS есть специальная функция, которая превращает такой "неполноценный" json-текст в полноценный, правильный, корректный.

А если ли у Delphi такая фишка?
Или придётся создавать своё колесо?
...
Рейтинг: 0 / 0
16.07.2018, 13:16
    #39674461
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
Выдрал JSON-текст из JavaScript, а привёл невнятный кусок кода на Delphi
...
Рейтинг: 0 / 0
16.07.2018, 13:29
    #39674468
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
defecatorпривёл невнятный кусок кода на Delphi

Почему невнятный?
Это строка получения TJSONObject из JSON-текста.

В JS такой финт ушами выполняет функция stringify.
...
Рейтинг: 0 / 0
16.07.2018, 13:30
    #39674471
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
кусок json:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	{
		labels: {
			ru: "Все для дома",
			by: "Усё для дома"
		},
		alias: {
			ru: "Для_дома_и_дачи",
			by: "Для_дома_і_дачы"
		},
		value: "3000",
		parent: null
	},

как видите, названия (имена) без кавычек
...
Рейтинг: 0 / 0
16.07.2018, 14:00
    #39674488
pit_alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
X11,

Код: pascal
1.
2.
3.
4.
class function TJSONObject.ParseString(const Br: TJSONByteReader; const Parent: TJSONAncestor): Integer;
...
  if Br.PeekByte <> Ord('"') then
    Exit(-Br.Offset);



придется свой пилить, так как в каноническом JSON имена параметров должны быть в кавычках
...
Рейтинг: 0 / 0
16.07.2018, 14:03
    #39674492
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
Странно, что разработчики Delphi такое не предусмотрели искаропки
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
...
Рейтинг: 0 / 0
16.07.2018, 14:30
    #39674511
pit_alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
X11,

наверное потому что "проблемы" реализация JS embarcadero не сильно волновали
...
Рейтинг: 0 / 0
16.07.2018, 14:34
    #39674515
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
Судя по https://ru.wikipedia.org/wiki/JSON#Синтаксис, бескавычность допускается более новым стандартом JSON5, который в Дельфи просто не реализован.
...
Рейтинг: 0 / 0
16.07.2018, 19:39
    #39674659
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
X11Или придётся создавать своё колесо?
Этих колёс уже на вездеход хватит, наверное...
https://github.com/hgourvest/superobject
...
Рейтинг: 0 / 0
17.07.2018, 08:23
    #39674803
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
alekcvp, ты уверен, что это колесо понимает именно такой формат, о котором здесь речь?
...
Рейтинг: 0 / 0
17.07.2018, 08:46
    #39674809
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
Superobject не компилируется в Tokyo.
...
Рейтинг: 0 / 0
17.07.2018, 09:30
    #39674832
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
X11кусок json:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	{
		labels: {
			ru: "Все для дома",
			by: "Усё для дома"
		},
		alias: {
			ru: "Для_дома_и_дачи",
			by: "Для_дома_і_дачы"
		},
		value: "3000",
		parent: null
	},
как видите, названия (имена) без кавычек

В общем, я так понял, что это сериализация.
superobject умеет такое обрабатывать:
https://github.com/hgourvest/superobject#rtti--marshalling-in-delphi-2010
но в Токио не компилируется: 21576692
...
Рейтинг: 0 / 0
17.07.2018, 09:50
    #39674840
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
Получается, что, если это сериализация объекта, но нужно узнать как-то, где-то, структуру этого объекта, т.е. описание: массив ли это, запись и потом и потом с помощью RTTI восстановить из такого вида JSONа.
Или библиотека сама может это сделать?

Вернее, не сериализация, а маршалинг.
...
Рейтинг: 0 / 0
17.07.2018, 09:56
    #39674841
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
Тут ещё что-то нашёл про json-маршалинг в Delphi.
https://keeper89.blogspot.com/2009/09/delphi-2010_4801.html
...
Рейтинг: 0 / 0
17.07.2018, 10:01
    #39674842
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
И вот:
http://fire-monkey.ru/topic/2665-маршалингдемаршалинг-в-systemjson/

авторЕсли правильно понимаю автор имеет ввиду TJSon.ObjectToJsonObject и TJSon.ObjectToJsonString. Как раз в стандартной библиотеке...
...
Рейтинг: 0 / 0
17.07.2018, 10:29
    #39674858
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
X11,

какой нафиг маршалинг?! Это вообще неофициальная фича в делфи, костыльная, с json (для их рад сервера). Сейчас от подобного даже в новой java отказываются (от встроенной сериализации объектов).

Только ручки, только хардкор. Надо из джаваскрипта/парса вытащить данные? Вперед каждое поле сохранять/обрабатывать. Имена параметров/полей неизвестны на входе? Есть перебор по ним. Больше контроля, лучше.
...
Рейтинг: 0 / 0
17.07.2018, 10:44
    #39674869
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
JaDiкакой нафиг маршалинг?! Это вообще неофициальная фича в делфи,

Даже справка есть
http://docwiki.embarcadero.com/Libraries/Berlin/en/REST.Json.TJson.JsonToObject
...
Рейтинг: 0 / 0
17.07.2018, 10:45
    #39674872
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
пользуюсь вот этой хорошей библиотекой от Andreas Hausladen: JsonDataObjects

Относительно новая, очень простая и удобная, минимум кода, есть даже твой любимый маршалинг для простых объектов (но все-равно рекомендую ручками -- надежнее).
...
Рейтинг: 0 / 0
17.07.2018, 10:46
    #39674874
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
X11JaDiкакой нафиг маршалинг?! Это вообще неофициальная фича в делфи,

Даже справка есть
http://docwiki.embarcadero.com/Libraries/Berlin/en/REST.Json.TJson.JsonToObject
Да, справка
авторEmbarcadero Technologies does not currently have any additional information. Please help us document this topic by using the Discussion page!
Говорю же, это внутренняя фича, не для использования в своих проектах (на свой страх и риск, так сказать).
...
Рейтинг: 0 / 0
17.07.2018, 10:52
    #39674877
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
авторEmbarcadero Technologies does not currently have any additional information. Please help us document this topic by using the Discussion page!

это у них по всей справке написано :)
...
Рейтинг: 0 / 0
17.07.2018, 10:58
    #39674884
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
X11,

Но есть нюанс -- кроме этого там больше ничего нет. Секрет прост -- справка делфи сгенерирована автоматически по исходному коду, и только потом дописывались доки. И здесь до них даже руки не дошли. Вообще, где-то год-два назад я в новостях приносил блого-пост от японского товарища -- и он там как раз "открыл" эти неофициальные методы и рассказал народу как пользоваться.
...
Рейтинг: 0 / 0
17.07.2018, 11:06
    #39674892
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
Вот что ещё нашёл
https://github.com/PKGeorgiev/Delphi-JsonToDelphiClass/releases
http://www.pgeorgiev.com/introducing-jsontodelphiclass/



уверен, кому-нибудь пригодится
...
Рейтинг: 0 / 0
17.07.2018, 11:32
    #39674910
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
...
Рейтинг: 0 / 0
17.07.2018, 13:45
    #39675027
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
JaDiX11,

Но есть нюанс -- кроме этого там больше ничего нет. Секрет прост -- справка делфи сгенерирована автоматически по исходному коду, и только потом дописывались доки. И здесь до них даже руки не дошли. Вообще, где-то год-два назад я в новостях приносил блого-пост от японского товарища -- и он там как раз "открыл" эти неофициальные методы и рассказал народу как пользоваться.
Да ладно, как только эта фича появилась в каком-то из релизов Дельфи, она тут же была описана в одной из книг Марко Канту.
Marco Cantu - Delphi 2010 Handbook.
Marco CantuJSON and Object Marshaling...........................................................................................233
Introducing JSON.......................................................................................................233
JSON in Delphi2010...................................................................................................234
Parsing JSON..............................................................................................................236
Streaming Objects to JSON.........................................................................................237
Using JSON Converters and Reverters.......................................................................240
JSON Values and Marshaling in DataSnap ServerMethods......................................243
С тех пор Эмбаркадеро кажется что-то добавляло и меняло в этом,
https://community.embarcadero.com/blogs/entry/how-to-convert-an-object-to-json-and-back-with-a-single-line-of-code-497
но началось это и было описано уже давно.
...
Рейтинг: 0 / 0
17.07.2018, 14:07
    #39675045
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON из JS, где имена не заключены в двойные кавычки
s62,

у Канту совсем другой механизм описан, для которого, кстати, есть вполне официальная документация:
http://docwiki.embarcadero.com/Libraries/Tokyo/en/Data.DBXJSONReflect.TJSONMarshal

Так сказать, для наглядности -- официальная фича и не официальная.. Давно уже взял за правило, что если какой-то подозрительный класс или метод не описан в доках, то это что-то для внутреннего пользования и лучше стараться не использовать без необходимости.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / JSON из JS, где имена не заключены в двойные кавычки / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]