Свой формат данных

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.
Ответить
site-eks
Сообщения: 20
Зарегистрирован: 23 мар 2012, 20:32

Свой формат данных

Сообщение site-eks »

Навалял такую штуку поскольку в JSON нет разметки, доп параметров и тд. Информация будет перекидываться с сокет-сервером,пинг высокий. Стоит ли делать свой парсер и свой формат данных ради сокращения объема передаваемых данных? может у кого есть наработки или совет какой?

Итак, в теории мой формат:

Код: Выделить всё

 recipe [name="хлеб" work="cooking"]:|{    title:| Простой хлеб    composition:|    {        ingredient [type="food"]:| Мука        ingredient [type="food"]:| Дрожжи        ingredient [type="water"]:| Тёплая вода        ingredient [type="food"]:| Соль    }    instructions:|    {        step:| Смешать все ингредиенты и тщательно замесить.        step:| Закрыть тканью и оставить на один час в тёплом помещении.        # step:| Почитать вчерашнюю газету. - это сомнительный шаг...         step:| Замесить ещё раз, положить на противень и поставить в духовку.    }#instructions} 
XML

Код: Выделить всё

 <recipe name="хлеб" work="cooking">    <title>Простой хлеб</title>    <composition>        <ingredient type="food">Мука</ingredient>        <ingredient type="food">Дрожжи</ingredient>        <ingredient type="water">Тёплая вода</ingredient>        <ingredient type="food">Соль</ingredient>    </composition>    <instructions>        <step>Смешать все ингредиенты и тщательно замесить.</step>        <step>Закрыть тканью и оставить на один час в тёплом помещении.</step>        <!-- <step>Почитать вчерашнюю газету.</step> - это сомнительный шаг... -->        <step>Замесить ещё раз, положить на противень и поставить в духовку.</step>        </instructions></recipe> 
IndieGD
Сообщения: 124
Зарегистрирован: 28 май 2013, 19:20

Re: Свой формат данных

Сообщение IndieGD »

JSON:

Код: Выделить всё

{    "work":"cooking","name":"хлеб","title":"Простой хлеб",    "compositions":    [        {"type":"food","name":"Мука"},        {"type":"food","name":"Мука"},        {"type":"food","name":"Мука"},        {"type":"water","name":"Тёплая вода"}    ],    "instructions":    [        "Смешать все ингредиенты и тщательно замесить.",        "Закрыть тканью и оставить на один час в тёплом помещении.",        "Почитать вчерашнюю газету. - это сомнительный шаг...",        "Замесить ещё раз, положить на противень и поставить в духовку."    ]}
Выводы сделайте сами ;)
P.S. А вообще даже в случае с XML, может количество данных вы и сократите, но парсер быстрее не напишете. Используйте сжатие данных, если уж объемы так критичны. Но писать свой формат это бредовая затея)
sasha^
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52

Re: Свой формат данных

Сообщение sasha^ »

Стоит ли делать свой парсер и свой формат данных ради сокращения объема передаваемых данных?
вы что игру создаете в которой важно +- 10 пинга и из-за этого вы мучаетесь? если же это просто сайт - разницы нет. темболее разницу в 2кб не думаю что можно почувствовать вообще.. ну тогда лучше уж побитовый изобрести и свою кодировку, если важен объем :lol: так что JSON и не изобретайте велосипед.
а если уж делать нефиг - так и скажите=)
site-eks
Сообщения: 20
Зарегистрирован: 23 мар 2012, 20:32

Re: Свой формат данных

Сообщение site-eks »

А если допустим есть 1000 рецептов с разн ой степенью вложенности, как из них сделать выборку типу ингредиента, например? Остается только каждый раз обход всего объекта в цикле? Не будет ли это дольше чем один раз пропарсить?
IndieGD
Сообщения: 124
Зарегистрирован: 28 май 2013, 19:20

Re: Свой формат данных

Сообщение IndieGD »

site-eks, если мне нужны ингредиенты по типам я пришлю их изначально разделенными по типам

Код: Выделить всё

     "compositions":    {        "food":[{"name":"Мука"},{"name":"Мука"},{"name":"Мука"}], "water":[{"name":"Вода"},{"name":"Вода"}]    } 
Ок, ну предположим такой случай, что нужен сразу и их список и выборка по типу ингредиента.
И чем же в этом поможет новый формат данных?
То есть как вы предполагаете распарсить строку таким образом чтобы иметь сразу доступ к ингредиенту и по его индексу и по названию его типа без циклов и переборов? :) Получается понадобится еще и новый тип для хранения данных изобретать, который будет покруче массивов и объектов, то есть прыгнуть выше самих разработчиков ЯП. Вы уверены что у вас получится? Думаю если это было бы так, то советов у нас вы бы не спрашивали :)
Ну или рассмотрим более приземленный вариант на выходе в своем формате вы будете держать два массива/объекта один со списком, второй по типам. То есть так или иначе хотя бы раз скан циклом вам придется провести. В этом случае для чего вам новый тип данных? Просто напишите функцию, которая так же один раз обойдет объект JSON и даст вам на выходе то что нужно.
И к чему это я все клоню) Что не нужно изобретать велосипед, если у базового нет багажника, а просто взять готовый и прикрутить его к нему)
IndieGD
Сообщения: 124
Зарегистрирован: 28 май 2013, 19:20

Re: Свой формат данных

Сообщение IndieGD »

site-eks, да и если может быть вы посчитаете, что я где-то не прав или чего-то не понимаю, то приведите мне пример, как это можно умудриться распарсить строку так что при
есть 1000 рецептов с разной степенью вложенности
потом можно было обратиться к объекту например и так recipe.composition[667] и вот эдак recipe.composition.getParam("water") и чтоб не пришлось при этом в методе getParam() обходить объект в цикле. На сколько я вижу это будет возможно только если парсер на каждый параметр будет создавать внутри выходного объекта другой объект с именем этого параметра, содержащий продублированный список. А это уже как бы попахивает бредом и нерациональным потреблением памяти. И даже если сделать так, то свой формат данных не будет лучше чем унаследоваться от JSON и разбирать его выходной объект на подобъекты.
Ответить