Skip to content

kpolischuk/test_task2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Парсинг пошукового рядка

Завдання перетворити пошуковий рядок в валідний JSON об`єкт

Дано рядок вигляду http://myurl.com?foo.bar=42&foo.baz=hello&bar.baz=true&baz=11, який необхідно перетворити на об`єкт вигляду:

{
  "foo": {
    "bar": 42,
    "baz": "hello",
  },
  "bar": {
    "baz": true,
  },
  "baz": 11,
}

Правила побудови:

  • перелік параметрів починається з символа ?

  • параметри розділяються символом &

  • назва параметру та його значення розділяються символом =

  • вкладені поля розділяються символом .

    • Наприклад:

    a=1 -->

    { "a": 1 }

    a.b=1 -->

    { "a": { "b": 1 } }

    a.b.c=1 -->

    { "a": { "b": { "c":1 } } }
  • якщо у поля відсутнє значення, це поле потрібно проігнорувати

    • Наприклад: a=1&b=&c=test -->
      { "a": 1, "c": "test" }
  • якщо є поля з однаковими назвами то у вихідному об'єкті залишається та властивість яка в заданому рядку розташована правіше

    • наприклад: user.name=Alex&user.name=Oleg -->
      { "user": { "name": "Oleg" } }
  • в значеннях параметрів можуть зустрічатись подвійні лапки. Це вказує на тип даних, але самі лапки не потрібно переносити у вихідий об`єкт

    • наприклад:

    a="true"&b=true&c=42&d="42"&e="hello"&f=hello

    Вірно:

    {
      "a": "true",
      "b": true,
      "c": "42",
      "d": 42,
      "e": "hello",
      "f": "hello"
    }

    Невірно:

    {
      "a": "\"true\"",
      "b": true,
      "c": 42,
      "d": 42,
      "e": "\"hello\"",
      "f": "hello"
    }
  • якщо параметри відсутні, повертати null

  • якщо рядок не відповідає вищеописаному формату, повертати помилку

Умови виконання

  • Реалізацію писати у файлі src/parser.js
  • Не використовувати сторонні бібліотеки
  • Тести повинні пройти успішно

Робота з проектом

  • запуск проекту: npm run start http://myurl.com?foo.bar=42&foo.baz=hello&bar.baz=true&baz=11
  • запуск тестів: npm run test
    • ! перед запуском тестів потрібно встановити залежності

About

Test task

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published