powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / JSON из JS, где имена не заключены в двойные кавычки
25 сообщений из 26, страница 1 из 2
JSON из JS, где имена не заключены в двойные кавычки
    #39674454
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выдрал 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
JSON из JS, где имена не заключены в двойные кавычки
    #39674461
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Выдрал JSON-текст из JavaScript, а привёл невнятный кусок кода на Delphi
...
Рейтинг: 0 / 0
JSON из JS, где имена не заключены в двойные кавычки
    #39674468
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorпривёл невнятный кусок кода на Delphi

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

В JS такой финт ушами выполняет функция stringify.
...
Рейтинг: 0 / 0
JSON из JS, где имена не заключены в двойные кавычки
    #39674471
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кусок 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
JSON из JS, где имена не заключены в двойные кавычки
    #39674488
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
JSON из JS, где имена не заключены в двойные кавычки
    #39674492
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, что разработчики Delphi такое не предусмотрели искаропки
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
...
Рейтинг: 0 / 0
JSON из JS, где имена не заключены в двойные кавычки
    #39674511
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

наверное потому что "проблемы" реализация JS embarcadero не сильно волновали
...
Рейтинг: 0 / 0
JSON из JS, где имена не заключены в двойные кавычки
    #39674515
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по https://ru.wikipedia.org/wiki/JSON#Синтаксис, бескавычность допускается более новым стандартом JSON5, который в Дельфи просто не реализован.
...
Рейтинг: 0 / 0
JSON из JS, где имена не заключены в двойные кавычки
    #39674659
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Или придётся создавать своё колесо?
Этих колёс уже на вездеход хватит, наверное...
https://github.com/hgourvest/superobject
...
Рейтинг: 0 / 0
JSON из JS, где имена не заключены в двойные кавычки
    #39674803
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp, ты уверен, что это колесо понимает именно такой формат, о котором здесь речь?
...
Рейтинг: 0 / 0
JSON из JS, где имена не заключены в двойные кавычки
    #39674809
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Superobject не компилируется в Tokyo.
...
Рейтинг: 0 / 0
JSON из JS, где имена не заключены в двойные кавычки
    #39674832
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
JSON из JS, где имена не заключены в двойные кавычки
    #39674840
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается, что, если это сериализация объекта, но нужно узнать как-то, где-то, структуру этого объекта, т.е. описание: массив ли это, запись и потом и потом с помощью RTTI восстановить из такого вида JSONа.
Или библиотека сама может это сделать?

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

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

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

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

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

Относительно новая, очень простая и удобная, минимум кода, есть даже твой любимый маршалинг для простых объектов (но все-равно рекомендую ручками -- надежнее).
...
Рейтинг: 0 / 0
JSON из JS, где имена не заключены в двойные кавычки
    #39674874
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
JSON из JS, где имена не заключены в двойные кавычки
    #39674877
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторEmbarcadero Technologies does not currently have any additional information. Please help us document this topic by using the Discussion page!

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

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



уверен, кому-нибудь пригодится
...
Рейтинг: 0 / 0
JSON из JS, где имена не заключены в двойные кавычки
    #39674910
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
JSON из JS, где имена не заключены в двойные кавычки
    #39675027
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
JSON из JS, где имена не заключены в двойные кавычки
    #39675045
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,

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

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


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